我以前使用 VB ASP.net Web-API 应用程序开发过多种网络服务,并在生产环境下使用了 https。在开发时,我使用 http 进行开发,然后在生产服务器上设置了 https。
为了在生产服务器上设置 https 端口和证书,我进行了以下操作:- 在 Windows 服务器上的证书存储中导入公共证书并使用 netsh 配置了特定的 https 端口。例如:
netsh http add urlacl url=https://+:22224/ user=everyone
- 通过指纹将证书绑定到端口。例如:
netsh http add sslcert ipport=0.0.0.0:22224 certhash=31cf73308a768100d4d32fe6e77638593e68ab57 appid={a33a711f-c587-44e5-96bc-dca8a7f3fc3c}
- 设置应用程序监听特定端口,启动时从配置文件中读取 URL 并应用到 (vb.net) HttpSelfHostConfiguration() 中。例如:https://IP:Port
这样可以顺利工作,我能够按照需要配置应用程序(例如,在内部网络服务器上为 http 配置一个端口以进行测试,在生产环境中为 https 配置另一个端口)。
现在,我想使用 ASP.NET Core 2.1.6 应用程序做同样的事情,但似乎不能以同样的方式工作。
公共证书(Comodo)已安装在 Windows Web 服务器的证书存储中。
使用 netsh 配置了 https 端口 22224。
已经使用 netsh 将证书绑定到端口(通过运行“netsh http show sslcert ipport=0.0.0.0:22224”来查看证书是否正确)。
在 Program.cs 中,我使用 UseUrls 添加了要监听的端口:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>() //;
.UseUrls(GV.cURL, "http://localhost:5000");
}
在运行时,GV.curl包含https://IP:22224。
如果我将应用程序配置为http端口(例如http://IP:22222),则应用程序可以正常运行(通过互联网)。
如果我设置已配置的https端口(https://IP:22224),则应用程序无法启动并显示错误信息:
无法配置HTTPS端点。未指定服务器证书,且找不到默认开发人员证书。
我在网上找到的信息令人困惑,这似乎是一个“移动目标”主题(asp.net core x-x基础处理经常更改)
我的现有发现:
错误消息中的代码段“未指定服务器证书”表明,证书必须在应用程序中进行配置?
我找到了一个示例,可在CreateWebHostBuilder中使用.useKestrel选项指定证书:
.UseKestrel(options =>
{
options.Listen(IPAddress.Loopback, 5000);
options.Listen(IPAddress.Loopback, 5001, listenOptions =>
{
listenOptions.UseHttps("certificate.pfx", "topsecret");
});
注意:在我的情况下,我需要将5001更改为22224。
问题:
我真的需要在asp.net core 2.1应用程序中配置(已绑定到端口的)公共证书吗?
如果是这样,最好的方法是什么(上面的示例是否是一个好方法)?