我无法让 IIS Express 接受我正在开发的 VS2010 MVC3 项目的安全连接。我可以让它接受端口 80 上的不安全连接,但端口 443 上不安全。
根据谷歌搜索,我采取了以下步骤:
1) 通过在 VS2010 命令行上执行以下命令找到我的 IIS Express 服务器自签名证书的 SHA1 指纹:
certmgr.exe /c /s /r localMachine MY
结果是 9B088F80 A4FC3141 28F62890 70BA1FC4 49FDD009。后来我才知道,使用指纹时需要删除空格。
2)通过在提升的命令行提示符下执行以下命令删除了链接到端口 443 的任何证书:
netsh http delete sslcert ipport=0.0.0.0:443
3) 通过在 VS2010 工具菜单中运行 Create GUID 生成一个新的 GUID。就我而言,我得到了 B0421A5B-FF61-47CE-892D-11AA3A9C7D2A。
4) 通过在提升的命令行提示符下执行以下命令,将自签名证书安装到端口 443:
netsh http add sslcert ipport=0.0.0.0:443 certhash=9B088F80A4FC314128F6289070BA1FC449FDD009 appid={B0421A5B-FF61-47CE-892D-11AA3A9C7D2A}
5) 通过从提升的命令行提示符运行以下命令来修改 ACL:
netsh http add urlacl url=https://localhost:443/ user=everyone
6) 修改 IIS Express 的 application.config 文件,增加端口 443 和 https 协议的绑定。该文件的站点部分最终如下所示:
<sites>
<site name="Development Web Site" id="1" serverAutoStart="true">
<application path="/">
<virtualDirectory path="/" physicalPath="%IIS_BIN%\AppServer\empty_wwwroot" />
</application>
<bindings>
<binding protocol="https" bindingInformation="*:443:localhost" />
<binding protocol="http" bindingInformation="*:80:localhost" />
</bindings>
</site>
<siteDefaults>
<logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" />
<traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" />
</siteDefaults>
<applicationDefaults applicationPool="IISExpressAppPool" />
<virtualDirectoryDefaults allowSubDirConfig="true" />
</sites>
7) 通过在提升的命令行提示符处执行以下命令重新启动 http 服务:
net stop http
net start http
8) 将我的 MVC 项目的属性页面的 Web 选项卡上的项目 URL 更改为以下内容:
http://localhost/
在我进行此更改后,保存项目属性页触发了服务器的重新配置。
当我从 VS2010 中启动 MVC 应用程序时,它正确地绑定到http://localhost(在端口 80 上,默认值;我没有包括让 IIS Express 在端口 80 上处理不安全/正常连接的所有步骤,但它们本质上是第 5 步到第 7 步,但侧重于 http 和端口 80,而不是 https 和端口 443)。
但是,尝试转换到任何需要 https 的操作都会导致“服务器拒绝连接”错误。
我究竟做错了什么?