.NET 部署 多域名 Https(SSL)通过代码方式
在上一个文章中,传送门,给大家介绍了怎么在配置文件中使用 Kestrel 部署 Https,正好今天有小伙伴稳问到:可以通过代码的方式实现 Kestrel 的 Https 的部署吗?答案是肯定的,我们这次一样去不是多个域名。
在使用代码实现中,我是主要使用到 ListenOptions.UseHttps,我们先看看官方文档怎么说吧,不想看我的可以直接跳转到官方文档,传送门
ListenOptions.UseHttps
将 Kestrel 配置为使用 HTTPS。
ListenOptions.UseHttps 扩展:
UseHttps:将 Kestrel 配置为使用 HTTPS,采用默认证书。 如果没有配置默认证书,则会引发异常。UseHttps(string fileName)UseHttps(string fileName, string password)UseHttps(string fileName, string password, Action<HttpsConnectionAdapterOptions> configureOptions)UseHttps(StoreName storeName, string subject)UseHttps(StoreName storeName, string subject, bool allowInvalid)UseHttps(StoreName storeName, string subject, bool allowInvalid, StoreLocation location)UseHttps(StoreName storeName, string subject, bool allowInvalid, StoreLocation location, Action<HttpsConnectionAdapterOptions> configureOptions)UseHttps(X509Certificate2 serverCertificate)UseHttps(X509Certificate2 serverCertificate, Action<HttpsConnectionAdapterOptions> configureOptions)UseHttps(Action<HttpsConnectionAdapterOptions> configureOptions)
ListenOptions.UseHttps 参数:
filename是证书文件的路径和文件名,关联包含应用内容文件的目录。password是访问 X.509 证书数据所需的密码。configureOptions是配置HttpsConnectionAdapterOptions的Action。 返回ListenOptions。storeName是从中加载证书的证书存储。subject是证书的主题名称。allowInvalid指示是否存在需要留意的证书,例如自签名证书。location是从中加载证书的存储位置。serverCertificate是 X.509 证书。
在生产中,必须显式配置 HTTPS。 至少必须提供默认证书。
下面要描述的支持的配置:
- 无配置
- 从配置中替换默认证书
- 更改代码中的默认值
无配置
Kestrel 在 http://localhost:5000 和 https://localhost:5001 上进行侦听(如果默认证书可用)。
从配置中替换默认证书
Kestrel 可以使用默认 HTTPS 应用设置配置架构。 从磁盘上的文件或从证书存储中配置多个终结点,包括要使用的 URL 和证书。
架构的注意事项:
- 终结点的名称不区分大小写。 例如,由于再也无法解析标识符“Families”,因此
HTTPSandHttps是等效的。 - 每个终结点都要具备
Url参数。 此参数的格式和顶层Urls配置参数一样,只不过它只能有单个值。 - 这些终结点不会添加进顶层
Urls配置中定义的终结点,而是替换它们。 通过Listen在代码中定义的终结点与在配置节中定义的终结点相累积。 Certificate部分是可选的。 如果未指定Certificate部分,则使用Certificates:Default中定义的默认值。 如果没有可用的默认值,则使用开发证书。 如果没有默认值,且开发证书不存在,则服务器将引发异常,并且无法启动。Certificate部分支持多个证书源。- 只要不会导致端口冲突,就能在配置中定义任何数量的终结点。
证书源
可以将证书节点配置为从多个源加载证书:
Path和Password用于加载 .pfx 文件。Path、KeyPath和Password用于加载 .pem/.crt 和 .key 文件。Subject和Store用于从证书存储中加载。
好了,罗嗦话说完了,我们抽取文档的一部分进行实践
相关文章