IIS Express——讓 SSL 發揮作用
我無法讓 IIS Express 接受我正在開發的 VS2010 MVC3 項目的安全連接。我可以讓它接受埠 80 上的不安全連接,但埠 443 上不安全。
根據Google搜尋,我採取了以下步驟:
- 通過在 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
通過在 VS2010 工具菜單中執行 Create GUID 生成一個新的 GUID。就我而言,我得到了 B0421A5B-FF61-47CE-892D-11AA3A9C7D2A。
通過在提升的命令行提示符下執行以下命令,將自簽名證書安裝到埠 443:
netsh http add sslcert ipport=0.0.0.0:443 certhash=9B088F80A4FC314128F6289070BA1FC449FDD009 appid={B0421A5B-FF61-47CE-892D-11AA3A9C7D2A}
- 通過從提升的命令行提示符執行以下命令來修改 ACL:
netsh http add urlacl url=https://localhost:443/ user=everyone
- 修改 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>
- 通過在提升的命令行提示符處執行以下命令重新啟動 http 服務:
net stop http net start http
- 將我的 MVC 項目的屬性頁面的 Web 選項卡上的項目 URL 更改為以下內容:
http://localhost/在我進行此更改後,保存項目屬性頁觸發了伺服器的重新配置。
當我從 VS2010 中啟動 MVC 應用程序時,它正確地綁定到<http://localhost>(在埠 80 上,預設值;我沒有包括讓 IIS Express 在埠 80 上處理不安全/正常連接的所有步驟,但它們本質上是第 5 步到第 7 步,但側重於 http 和埠 80,而不是 https 和埠 443)。
但是,嘗試轉換到任何需要 https 的操作都會導致“伺服器拒絕連接”錯誤。
我究竟做錯了什麼?
將項目設置為使用 IISExpress 後,
F4在解決方案資源管理器上選擇項目時按下以顯示屬性,並在屬性集SSL Enable設置true下SSL URL設置 URL 以及您想要的埠(在您的情況下為 443) SSL。這對我有用,無需深入了解,並且自簽名證書是自動的。
要預設在該 URL 上執行項目,您可以右鍵點擊該項目,選擇屬性,然後選擇 Web 並將項目 URL 替換為<https://localhost:443>