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