我有一个工作的Azure Web角色,我一直在http端点上使用它。我现在正试图将其切换到https但是我认为这是一个简单的操作。 (我将在此处提供一些提示,以便将来的读者解决我已经遇到过的问题。
我使用Microsoft here记录的powershell命令创建(现在)自签名证书,并将其上传到azure门户。我知道第三方在拥有自签名证书时无法使用API,但我的计划是在购买适当的&#39之前使用以下内容进行本地客户端测试;证书。
ServicePointManager.ServerCertificateValidationCallback += (o, c, ch, er) => true;
提示:您需要上传.pfx文件,然后提供您在powershell脚本中使用的密码。不要因建议创建一个完全不同的.cer文件而感到困惑。
然后,我按照记录的流程来配置azure云服务here,尽管这些操作中的许多现在直接通过visual studio而不是手工编辑文件完成。主要的云服务'我希望修改的角色项目:
此时,我没有看到我预期的结果。该服务仍可在http上使用,但在https上不可用。当我尝试在https上浏览它时( includeExceptionDetailInFaults 设置为true)我得到:
HTTP错误404"您要查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用"
我认为这意味着https端点可用但服务本身绑定到http而不是https,尽管我对web.config进行了更改。
我已经验证发布步骤确实是通过修改一些返回的内容来上传新配置。 (请记住,http仍然可以使用。)
我试过删除过时的' http端点,但这只会导致不同的错误:
"无法找到与绑定WebHttpBinding的端点的方案http匹配的基址。已注册的基地址方案为[https]"
我确定我必须在这里遗漏一些简单的东西。任何人都可以建议它是什么或进一步解决问题的技巧?有许多与网站相关的堆栈溢出答案,并建议需要调整IIS设置,但我不知道这是如何适用于我不能直接控制的网络角色服务器
编辑根据Gaurav的建议,我使用(自签名)证书为我们自己的域而不是cloudapp.net重复此过程,然后尝试通过此域访问该服务。我仍然看到相同的结果;即服务可以通过http而不是https。
Edit2 来自csdef文件的信息......是" Endpoint1"的双重引用。可疑?
<Sites>
<Site name="Web">
<Bindings>
<Binding name="Endpoint1" endpointName="HttpsEndpoint" />
<Binding name="Endpoint1" endpointName="HttpEndpoint" />
</Bindings>
</Site>
</Sites>
<Endpoints>
<InputEndpoint name="HttpsEndpoint" protocol="https" port="443" certificate="backend" />
<InputEndpoint name="HttpEndpoint" protocol="http" port="80" />
</Endpoints>
<Certificates>
<Certificate name="backend" storeLocation="LocalMachine" storeName="My" />
</Certificates>