如何让自托管 HTTPS asp.net 核心站点自动使用绑定到端口的证书

Posted

技术标签:

【中文标题】如何让自托管 HTTPS asp.net 核心站点自动使用绑定到端口的证书【英文标题】:How to get self hosted HTTPS asp.net core site to automatically use certificate bound to port 【发布时间】:2021-09-02 02:41:56 【问题描述】:

如果我将证书绑定到端口(使用 netsh http add sslcert ipport=0.0.0.0: ...) - 在 WCF 中自托管 HTTPS 服务时我不需要指定只要我使用相同的端口,它就会自动找到证书。

在 ASP.NET Core 中,如果我自己托管 HTTPS 端点并且未指定证书,则会引发异常(“无法配置 HTTPS 端点。未指定服务器证书”)。

在 ASP.NET Core 中有没有办法让它自动使用已经绑定到端口的证书?

【问题讨论】:

如果我没记错的话,您可以在将 SSL 证书绑定到端口时指定 GUID。您是否使用过 ASP.NET 应用程序的 GUID?这可能会奏效。 我需要它像 WCF 那样完全自动化。我正在将 WCF 服务迁移到 ASP.Net Core,并且无法添加任何新配置项或使用带有证书的 GUID 你可以看看:docs.microsoft.com/en-us/aspnet/core/security/authentication/… 感谢@TheobaldDu,但该文章没有提供将证书注册到端口的方法 【参考方案1】:

所以经过一番研究,似乎 netsh http add sslcert ipport 将证书和端口绑定添加到了 Http.Sys Windows 组件

Http.Sys 被 IIS 和 WCF 使用,这就是为什么 WCF 会自动获取证书而无需指定它。

使用 Asp.net Core,它使用跨平台的 Kestrel,因此不使用基于 Windows 的 Http.Sys,因此不会自动获取证书。

我能找到的唯一解决方案是,ASP.Net Core 可以通过在构建主机时使用选项 UseHttpSys() 使用 Http.Sys 而不是 Kestrel 运行。这样做的缺点是它仅适用于 Windows,不能跨平台运行。

【讨论】:

以上是关于如何让自托管 HTTPS asp.net 核心站点自动使用绑定到端口的证书的主要内容,如果未能解决你的问题,请参考以下文章

IIS7的集成模式下如何让自定义的HttpModule不处理静态文件(.html .css .js .jpeg等)请求

WCF 服务 - ASP.net 托管 - 单点登录,如何传递凭据

如何将 slug 添加到 asp.net 核心网站中的所有链接生成?

先定一个小目标Asp.net Core 在IIS上的托管运行

在 ASP.NET Core 应用程序中将 HTTPS 站点重定向到非 www

ASP.NET Core 托管环境变量被忽略