如何将已运行的Azure Web角色从HTTP切换至HTTPS?
最近我把一个跑在HTTP端点的Azure Web角色改成HTTPS,本以为是个简单操作,结果踩了一堆坑!特意整理了几个关键小贴士,帮后来人少走弯路:
证书要和Web角色端点绑定到位:我用PowerShell创建自签名测试证书的命令是
New-SelfSignedCertificate -DnsName yourdomain.cloudapp.net -CertStoreLocation "cert:\LocalMachine\My",导出PFX文件上传到Azure门户后,一定要在云服务配置里把证书关联到HTTPS端点,不然证书等于白传。更新ServiceDefinition和ServiceConfiguration配置文件:
在ServiceDefinition.csdef里要添加HTTPS输入端点:<InputEndpoint name="HttpsIn" protocol="https" port="443" certificate="YourCertAlias" />同时在
ServiceConfiguration.cscfg里指定证书的指纹信息:<Certificate name="YourCertAlias" thumbprint="YOUR_CERT_THUMBPRINT" thumbprintAlgorithm="sha1" />这里的别名要和门户上传证书时填的一致,指纹可别抄错!
本地调试要手动信任自签名证书:自签名证书默认不受浏览器和客户端信任,本地调试时会一直报安全错误。记得把证书导入到本地的「受信任根证书颁发机构」存储里,不然连自己的API都调不通。
强制Web应用走HTTPS:光配置了端点还不够,Web应用本身也要监听HTTPS端口并做跳转。比如ASP.NET Core项目里要加
app.UseHttpsRedirection();,传统ASP.NET可以在web.config里配置URL重写规则,把HTTP请求自动转到HTTPS。
另外提醒一句:自签名证书只能用于测试场景,第三方调用你的API时会因为证书不受信任而失败,正式环境一定要用CA颁发的合法证书哦!
内容的提问来源于stack exchange,提问作者NeilMacMullen

