我过去开发过各种使用 https 进行生产的 Web 服务(VB ASP.net Web-API 应用程序)。
我已经使用 http 完成了开发,然后在生产服务器上设置了 https。要在生产服务器上为 https 和证书设置端口,我有:
- 在证书存储中导入公共证书
Windows 服务器使用 netsh 配置了 https 的特定端口。
例如:
netsh http 添加 urlacl url=https://+:22224/用户=所有人
- 将证书(通过指纹)绑定到端口。例如:
netsh http 添加 sslcert ipport=0.0.0.0:22224
certhash=31cf73308a768100d4d32fe6e77638593e68ab57
appid={a33a711f-c587-44e5-96bc-dca8a7f3fc3c}
- 设置应用程序来监听特定端口,我有
在启动时从配置文件读取 url - 例如https://IP:端口并应用了
它到 (vb.net) HttpSelfHostConfiguration()
这工作没有问题,我可以根据需要配置应用程序(例如,在配置文件中为 http 配置一个端口以在 Intranet 服务器上进行测试,在配置文件中为生产环境配置 https 的另一个端口)。
现在,我想对一个做同样的事情ASP.NET核心2.1.6应用程序和它似乎不以同样的方式工作。
公共证书 (comodo) 安装在 Windows Web 服务器的证书存储中。
端口 22224 使用 netsh 配置为 https。
使用 netsh 将证书绑定到端口(使用 netsh http show sslcert ipport=0.0.0.0:22224 显示证书正确
In 程序.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 的基本处理中发生变化)。
我现在的发现:
被剪断的“未指定服务器证书” 错误消息中表示该证书必须在应用程序中配置吗?
我已经发现一个例子使用 .useKestrel 选项在 CreateWebHostBuilder 中指定证书:
.UseKestrel(options =>
{
options.Listen(IPAddress.Loopback, 5000);
options.Listen(IPAddress.Loopback, 5001, listenOptions =>
{
listenOptions.UseHttps("certificate.pfx", "topsecret");
});
注意:就我而言,我必须将 5001 更改为 22224。
问题: