我有一個在 IIS 7.5 中運行的 ASP 應用程式。由於 Windows 7 即將停產,我必須升級到 Windows 10 和 IIS 10。一切似乎都已就緒,除了現在 ASP 網站或任何其他網站都可以工作(除非使用 https)。到目前為止,Firefox 給出了 PR_CONNECT_RESET_ERROR,Chrome 返回了 ERR_SSL_PROTOCOL_ERROR,Edge 傳回了 Hmmm 無法存取此頁面。
一些答案指出了 ARR 重寫模組,我將其卸載並在重新啟動後重新安裝更新的版本,結果相同。我最終卸載了它(不再需要它)並重新啟動。我重新安裝 IIS,消除 Windows 功能重新啟動,然後再次重新安裝 IIS 並重新啟動。我刪除了所有證書並創建了一個自簽名證書並出現了相同的問題。最後,我從該Web 伺服器中刪除了所有網站,並在預設目錄(wwwroot,其中包含一個html 檔案和兩個圖像)上創建了一個新網站,只要使用http 協議,就會顯示該目錄,但不會顯示https(相同的錯誤)。我跟著本指南對於 IIS 7 但不喜歡。重新安裝後,我也會撤銷並重新授予 IUSR 對資料夾的權限。最後,我禁用了防毒軟體的 SSL 過濾,但沒有什麼區別。
最初使用的證書是在內部使用 openssl 產生的,以產生公司範圍的根證書、中間證書和機器證書,在升級之前都可以正常工作。目前,正如我所說,即使使用自簽名瀏覽器也無法使用任何使用過的瀏覽器來提供最簡單的內容。我不知道該檢查什麼。
這是我從 IIS 獲得的跟踪
#Software: Microsoft Internet Information Services 10.0
#Version: 1.0
#Date: 2020-01-20 20:12:22
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken
2020-01-20 20:12:22 192.168.1.100 GET / - 80 - 192.168.1.100 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64;+rv:73.0)+Gecko/20100101+Firefox/73.0 - 200 0 0 2687
2020-01-20 20:12:22 192.168.1.100 GET /iisstart.png - 80 - 192.168.1.100 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64;+rv:73.0)+Gecko/20100101+Firefox/73.0 http://devmachine.company.local/ 200 0 0 12
2020-01-20 20:12:22 192.168.1.100 GET /favicon.ico - 80 - 192.168.1.100 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64;+rv:73.0)+Gecko/20100101+Firefox/73.0 - 404 0 2 5
#Software: Microsoft Internet Information Services 10.0
#Version: 1.0
#Date: 2020-01-20 12:26:37
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken
2020-01-20 20:12:22 ::1 GET / - 443 - ::1 Microsoft+Windows+Network+Diagnostics - 200 0 0 996
2020-01-20 20:12:22 192.168.1.100 HEAD / - 80 - 192.168.1.100 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/79.0.3945.130+Safari/537.36 - 200 0 0 19
2020-01-20 20:27:38 192.168.1.100 GET / - 80 - 192.168.1.100 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/79.0.3945.130+Safari/537.36 - 200 0 0 8
2020-01-20 20:27:38 192.168.1.100 GET /iisstart.png - 80 - 192.168.1.100 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/79.0.3945.130+Safari/537.36 http://devmachine.company.local/ 200 0 0 50
2020-01-20 20:27:38 192.168.1.100 GET /favicon.ico - 80 - 192.168.1.100 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/79.0.3945.130+Safari/537.36 http://devmachine.company.local/ 404 0 2 19
正如你所看到的,只有 http 有效,(我在另一次嘗試中更改了時間,看看時鐘是否有問題,但事實並非如此。Chrome 抱怨 http,所以時鐘沒問題),但沒有任何痕跡https。
答案1
我自己得到了答案。問題是,這些年來密碼已經發生了變化,但僅對 Windows 2012 和 2016 伺服器進行了適當的更新,但對舊版本則不然,Windows 10 已經有了這些條目並進行了相應更新。因此,一些不存在的註冊表項會影響升級後 IIS 中處理 SSL 的方式。若要測試是否是這種情況,請在 Firefox 中開啟新選項卡,然後輸入 about:config 並蒐索 security.tls.version.max 並將其設為 3 並儲存。如果您嘗試造訪網站,它可以正常運作,或至少會顯示憑證不正確的常見警告。如果是這樣,則撤銷 Firefox 中的變更並執行所描述的解決方案這裡;無論如何,我將對其進行描述,以防萬一這些頁面被遺忘或刪除。
整個問題是透過更新註冊表中的以下項目來解決的,這些條目應該創建或更改,具體取決於您之前是否已經完成了部分更改以增強 Web 伺服器的安全性。
更新 WinHTTP
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp\
DefaultSecureProtocols = (DWORD): 0xAA0
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp\
DefaultSecureProtocols = (DWORD): 0xAA0
如果尚未啟用 TLS 1.2,請啟用
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions" = dword:00000001
"SchUseStrongCrypto" = dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SystemDefaultTlsVersions" = dword:00000001
"SchUseStrongCrypto" = dword:00000001
如果您的應用程式是 64 位元作業系統上的 32 位元應用程序,則也要修改
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions" = dword:00000001
"SchUseStrongCrypto" = dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319]
"SystemDefaultTlsVersions" = dword:00000001
"SchUseStrongCrypto" = dword:00000001
如果您尚未啟用 TLS 1.2,請設定 SCHANNEL 協議
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"DisabledByDefault" = dword:00000000
"Enabled" = dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
"DisabledByDefault" = dword:00000000
"Enabled" = dword:0xffffffff
如果您希望舊版應用程式/瀏覽器支援 TLS 1.1,請確保 TLS 1.1 與 TLS 1.2 相同。建議停用 SSL 等弱密碼,如果可以的話,建議停用 TLS 1.0(對於客戶端和伺服器,DisableByDefault = dword:00000001 Enabled=00000001。這些項目位於 TLS 1.0 中,與 TLS 1.1 和 TLS 1.2 處於同一層級)啟動計算機。
如果一切順利,您的應用程式將再次運行,或至少會出現由於自簽名憑證而導致的安全風險的常見訊息。希望這對您有用,如果它可以幫助您解決問題,請投票並提前致謝。
注意:您可以使用此處提供的腳本設定/清除正確的登錄值:https://www.hass.de/content/setup-microsoft-windows-or-iis-ssl-perfect-forward-secrecy-and-tls-12
答案2
經過這篇文章的大量搜索後,我覺得有必要發文。它基本上是正確的。
我確實遇到了一些麻煩 - 所以建議。
- 使用 MS 網站建議底部的腳本。它需要以管理員身份運行。
- 如果該腳本不起作用,請刪除您建立的所有金鑰,然後重試該腳本。
最後,如果您在更新至 Server 2019 時導致了問題,並且您的 IIS 伺服器正在連線到 SQL 2012 伺服器,請確保將其修補到 SP4。 :)