mirror of https://github.com/abpframework/abp.git
43 changed files with 707 additions and 226 deletions
@ -0,0 +1,34 @@ |
|||
# Configuring Configuring SSL certificate(HTTPS) |
|||
|
|||
A website needs an SSL certificate in order to keep user data secure, verify ownership of the website, prevent attackers from creating a fake version of the site, and gain user trust. |
|||
|
|||
This document introduces how to get and use SSL certificate(HTTPS) for your application. |
|||
|
|||
## Get a SSL Certificate from a Certificate Authority |
|||
|
|||
You can get a SSL certificate from a certificate authority (CA) such as [Let's Encrypt](https://letsencrypt.org/) or [Cloudflare](https://www.cloudflare.com/learning/ssl/what-is-an-ssl-certificate/) and so on. |
|||
|
|||
Once you have a certificate, you need to configure your web server to use it. The following references show how to configure your web server to use a certificate. |
|||
|
|||
* [Host ASP.NET Core on Linux with Apache: HTTPS configuration](https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-apache) |
|||
* [Host ASP.NET Core on Linux with Nginx: HTTPS configuration](https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx) |
|||
* [How to Set Up SSL on IIS 7 or later](https://learn.microsoft.com/en-us/iis/manage/configuring-security/how-to-set-up-ssl-on-iis) |
|||
|
|||
## Create a Self-Signed Certificate |
|||
|
|||
You can create a self-signed certificate for testing purposes or internal use. |
|||
|
|||
There is an article about [how to create a self-signed certificate](https://learn.microsoft.com/en-us/dotnet/core/additional-tools/self-signed-certificates-guide), If you are using IIS, you can use the following this document to [obtain a Certificate](https://learn.microsoft.com/en-us/iis/manage/configuring-security/how-to-set-up-ssl-on-iis#obtain-a-certificate) |
|||
|
|||
## Common Problems |
|||
|
|||
### The remote certificate is invalid because of errors in the certificate chain: UntrustedRoot |
|||
|
|||
This error may occur when using IIS. You need to trust your certificate by `Manage computer certificates`. |
|||
|
|||
## References |
|||
|
|||
* [ABP commercial IIS Deployment](https://docs.abp.io/en/commercial/latest/startup-templates/application/deployment-iis) |
|||
* [HTTPS in ASP.NET Core](https://learn.microsoft.com/en-us/aspnet/core/security/enforcing-ssl) |
|||
* [Let's Encrypt](https://letsencrypt.org/getting-started) |
|||
* [Cloudflare's Free SSL / TLS](https://www.cloudflare.com/application-services/products/ssl/) |
|||
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 29 KiB |
@ -0,0 +1,129 @@ |
|||
import { parseBaseTypeWithGenericTypes } from '../utils/model'; |
|||
import { parseGenerics } from '../utils/tree'; |
|||
|
|||
import {test} from '@jest/globals'; |
|||
|
|||
const cases: Array<[string, string[]]> = [ |
|||
[ |
|||
'Volo.Abp.Application.Dtos.AuditedEntityWithUserDto', |
|||
['Volo.Abp.Application.Dtos.AuditedEntityWithUserDto'], |
|||
], |
|||
[ |
|||
'Volo.Abp.Application.Dtos.AuditedEntityWithUserDto<Volo.Abp.Identity.IdentityUserDto>', |
|||
['Volo.Abp.Application.Dtos.AuditedEntityWithUserDto', 'Volo.Abp.Identity.IdentityUserDto'], |
|||
], |
|||
[ |
|||
'Volo.Abp.Application.Dtos.AuditedEntityWithUserDto<string,Volo.Abp.Identity.IdentityUserDto>', |
|||
[ |
|||
'Volo.Abp.Application.Dtos.AuditedEntityWithUserDto', |
|||
'string', |
|||
'Volo.Abp.Identity.IdentityUserDto' |
|||
], |
|||
], |
|||
[ |
|||
'Volo.Abp.Application.Dtos.AuditedEntityWithUserDto<string,Volo.Abp.Identity.IdentityUserDto<number>>', |
|||
[ |
|||
'Volo.Abp.Application.Dtos.AuditedEntityWithUserDto', |
|||
'string', |
|||
'Volo.Abp.Identity.IdentityUserDto', |
|||
'number', |
|||
], |
|||
], |
|||
[ |
|||
'Volo.Abp.Application.Dtos.AuditedEntityWithUserDto<string,Volo.Abp.Identity.IdentityUserDto<Volo.Abp.Core.Dummy<System.String>>>', |
|||
[ |
|||
'Volo.Abp.Application.Dtos.AuditedEntityWithUserDto', |
|||
'string', |
|||
'Volo.Abp.Identity.IdentityUserDto', |
|||
'Volo.Abp.Core.Dummy', |
|||
'System.String', |
|||
], |
|||
], |
|||
[ |
|||
'AuditedEntityWithUserDto', |
|||
['AuditedEntityWithUserDto'], |
|||
], |
|||
]; |
|||
|
|||
test.each(cases)('should parse %s', (inputStr, expected) => { |
|||
const parsed = parseBaseTypeWithGenericTypes(inputStr); |
|||
expect(parsed).toEqual(expected); |
|||
}) |
|||
|
|||
describe('parseGenerics', () => { |
|||
|
|||
it('should work with simple type', function() { |
|||
const node = parseGenerics('System.String'); |
|||
expect(node.data).toEqual('System.String'); |
|||
expect(node.index).toBe(0); |
|||
expect(node.parent).toBe(null); |
|||
}); |
|||
it('should work with simple Array type', function() { |
|||
const node = parseGenerics('System.String[]'); |
|||
expect(node.data).toEqual('System.String[]'); |
|||
expect(node.index).toBe(0); |
|||
expect(node.parent).toBe(null); |
|||
}); |
|||
|
|||
it('should work with simple', function() { |
|||
const node = parseGenerics('Volo.Abp.Application.Dtos.AuditedEntityWithUserDto'); |
|||
expect(node.data).toEqual('Volo.Abp.Application.Dtos.AuditedEntityWithUserDto'); |
|||
expect(node.index).toBe(0); |
|||
expect(node.parent).toBe(null); |
|||
}); |
|||
|
|||
it('should work with `Volo.Abp.Application.Dtos.AuditedEntityWithUserDto<Volo.Abp.Identity.IdentityUserDto>`', function() { |
|||
const type = 'Volo.Abp.Application.Dtos.AuditedEntityWithUserDto<Volo.Abp.Identity.IdentityUserDto>'; |
|||
const node = parseGenerics(type); |
|||
|
|||
expect(node.data).toEqual('Volo.Abp.Application.Dtos.AuditedEntityWithUserDto'); |
|||
expect(node.children.length).toBe(1); |
|||
const child = node.children[0]; |
|||
expect(node.children[0].data).toEqual('Volo.Abp.Identity.IdentityUserDto'); |
|||
expect(child.parent).toBe(node); |
|||
}); |
|||
|
|||
|
|||
it('should work with `Volo.Abp.Application.Dtos.AuditedEntityWithUserDto<System.string,Volo.Abp.Identity.IdentityUserDto>`', function() { |
|||
const type = 'Volo.Abp.Application.Dtos.AuditedEntityWithUserDto<System.string,Volo.Abp.Identity.IdentityUserDto>'; |
|||
const node = parseGenerics(type); |
|||
|
|||
expect(node.data).toEqual('Volo.Abp.Application.Dtos.AuditedEntityWithUserDto'); |
|||
expect(node.children.length).toBe(2); |
|||
expect(node.children[0].data).toEqual('System.string'); |
|||
expect(node.children[0].index).toBe(0) |
|||
expect(node.children[1].data).toEqual('Volo.Abp.Identity.IdentityUserDto'); |
|||
expect(node.children[1].index).toBe(1); |
|||
|
|||
}); |
|||
it('should Volo.Abp.Application.Dtos.AuditedEntityWithUserDto<System.string,Volo.Abp.Identity.IdentityUserDto<System.Int>>', function() { |
|||
const type = 'Volo.Abp.Application.Dtos.AuditedEntityWithUserDto<System.string,Volo.Abp.Identity.IdentityUserDto<System.Int>>'; |
|||
const node = parseGenerics(type); |
|||
expect(node.data).toEqual('Volo.Abp.Application.Dtos.AuditedEntityWithUserDto'); |
|||
expect(node.children.length).toBe(2); |
|||
expect(node.children[0].data).toEqual('System.string'); |
|||
expect((node.children[0]).parent).toBe(node); |
|||
|
|||
expect(node.children[1].data).toEqual('Volo.Abp.Identity.IdentityUserDto'); |
|||
expect(node.children[1].children.length).toBe(1); |
|||
expect(node.children[1].children[0].data).toEqual('System.Int'); |
|||
expect(node.children[1].children[0].parent).toBe(node.children[1]) |
|||
expect(node.children[1].children[0].index).toBe(0) |
|||
|
|||
}); |
|||
|
|||
it('should Volo.Abp.Application.Dtos.AuditedEntityWithUserDto<Volo.Abp.Identity.IdentityUserDto<System.Int>,System.string>', function() { |
|||
const type = 'Volo.Abp.Application.Dtos.AuditedEntityWithUserDto<Volo.Abp.Identity.IdentityUserDto<System.Int>,System.string>'; |
|||
const node = parseGenerics(type); |
|||
expect(node.data).toEqual('Volo.Abp.Application.Dtos.AuditedEntityWithUserDto'); |
|||
expect(node.children.length).toBe(2); |
|||
expect(node.children[0].data).toEqual('Volo.Abp.Identity.IdentityUserDto'); |
|||
expect(node.children[0].children.length).toBe(1); |
|||
expect(node.children[0].children[0].data).toEqual('System.Int'); |
|||
expect(node.children[1].data).toEqual('System.string'); |
|||
|
|||
}); |
|||
}); |
|||
|
|||
|
|||
|
|||
Loading…
Reference in new issue