我正在使用Windows 10计算机上的自托管服务栈Web服务,并且尝试在其上启用https。到目前为止,我所做的是:
1)我已经使用我们公司的证书服务器创建了通配符证书,并使用私钥将其导出。
2)我已经在开发机器的“ LocalMachine / Personal”证书存储区中安装了证书。
3)我已经从命令行运行了以下命令:
netsh http add sslcert ipport=0.0.0.0:{DefaultConfig.DefaultSslPort} certhash={sha1} appid={{{appId}}}
netsh http add urlacl url=https://+:{DefaultConfig.DefaultSslPort}/ user=everyone
4)我在Program.cs中添加了以下内容
var listeningOn = $"http://*:{DefaultConfig.DefaultPort}/";
appHost.Start(new[]{ listeningOn, $"https://*:{DefaultConfig.DefaultSslPort}/" });
现在,当我启动项目时,http绑定可以正常工作,Web服务可以按预期加载和运行。但是,当我尝试https绑定时,浏览器显示已建立连接并且证书有效(出现绿色锁定,并且网络流量显示连接成功),但是服务器响应:
HTTP Error 503. The service is unavailable.
很明显它是可用的(如Http绑定所证明的),但是Windows和Servicestack之间有些脱节,我真的不知道该在哪里寻找答案。我尝试了很多搜索短语,但是它们似乎都告诉我检查/执行我已经检查/完成的操作,或者结果特定于特定的应用程序/框架/操作系统,并且没有帮助。
答案 0 :(得分:3)
好,所以要反对许多,很多,您应该不使用以下方法保留网址:
netsh http add urlacl url=https://+:{DefaultConfig.DefaultSslPort}/ user=everyone
使用ServiceStack自托管时。我不知道为什么(如果您知道为什么,请随时发表评论),但这会使Windows无法将https请求向下传递到您的自托管站点。我通过下载ServiceStack源代码进行了检查,并在连接回调上设置了一个断点,该断点是任何传入连接的入口。永远不会命中断点,因此请求永远不会到达Servicestack。
删除网址保留后,一切正常。