https - 调试自托管 https 连接问题的任何好方法?
问题描述
我正在使用 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 之间存在一些脱节,我真的不知道在哪里寻找答案。我尝试了一堆搜索短语,但它们似乎都告诉我检查/做我已经检查/完成的事情,或者结果特定于特定的应用程序/框架/操作系统并且没有帮助。
解决方案
好的,所以与那里的许多帖子相反,您不应该使用以下方式保留网址:
netsh http add urlacl url=https://+:{DefaultConfig.DefaultSslPort}/ user=everyone
使用 ServiceStack 自托管时。我不知道为什么(如果您知道原因,请随时发表评论),但这会使 Windows 无法将 https 请求传递到您的自托管站点。我通过下载 ServiceStack 源代码检查了这一点,并在连接回调上放置了一个断点,这是任何传入连接的入口点。断点永远不会被命中,因此请求永远不会到达 Servicestack。
删除 URL 保留后,一切正常。
推荐阅读
- html - 需要搜索列表作为 ionic 3 中的弹出框
- javascript - select2选项空间未搜索
- java - 如何在基于spring注解的项目中提供数据源入口。
- javascript - 如何安全地访问 firebase 数据以自动填充网页?
- python - Groupby和具有相同值的多列的总和
- apache-kafka - Kafka 集群在高输入时流超时
- java - TAG 和 UpdateUI 在 LoginActivity.java 的 FragmentActivity 错误中具有私有访问权限
- ruby-on-rails - Rails 5.x:如何在运行时添加路由而不覆盖原始路由表?
- php - 在 wordpress 中重复发布时出现 503 错误
- react-native - 在 react-native expo 应用程序中使用初始化 firestore 的正确方法