localhost测试环境下ASP.NET项目SSL证书适配问题求助
解决iisexpress-proxy转发后证书不匹配的问题
问题核心是iisexpress-proxy默认没修改请求的Host头,导致后端IIS Express收到的请求域名还是localhost:44300,和你为[mysubdomain].dynv6.net申请的证书不匹配。按以下步骤解决:
修改iisexpress-proxy命令,强制转发Host头
给iisexpress-proxy加--headers参数,把请求的Host头替换成你的动态域名。更新后的启动命令:"C:\Program Files\nodejs\npx.cmd" iisexpress-proxy https://localhost:44300 to https://*:81 --headers "Host:[mysubdomain].dynv6.net"这样转发后的请求会告诉IIS Express,当前访问的域名是你的动态域名,而非localhost。
给IIS Express配置自定义域名的证书绑定
默认IIS Express只认localhost的证书,你需要把Let's Encrypt的证书绑定到项目的站点配置里:- 找到项目根目录下的隐藏文件夹
.vs\config\applicationhost.config - 找到对应站点的
<bindings>节点,添加或修改成以下绑定(替换成你的域名):<binding protocol="https" bindingInformation="*:44300:[mysubdomain].dynv6.net" sslFlags="0" /> - 获取Let's Encrypt证书的哈希值:打开PowerShell执行
Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Subject -match "[mysubdomain].dynv6.net" } | Select-Object Thumbprint - 把哈希值填到绑定节点里,补充证书存储信息:
<binding protocol="https" bindingInformation="*:44300:[mysubdomain].dynv6.net" sslFlags="0" certificateHash="你的证书哈希字符串" certificateStoreName="My" />
- 找到项目根目录下的隐藏文件夹
验证端口转发和DNS解析
- 确认路由器的端口转发规则是把外部81端口指向你笔记本的81端口
- 用命令
nslookup [mysubdomain].dynv6.net检查DNS是否正确解析到你的公网IP
测试访问
重启Visual Studio的调试服务和iisexpress-proxy,访问https://[mysubdomain].dynv6.net:81,此时浏览器应该不会再弹出证书不匹配的警告。
内容的提问来源于stack exchange,提问作者Bernd Morgeneyer
相关产品推荐
相关产品推荐

