我在 Windows Server 2012 R2(應用程式 Web 伺服器,IIS)上遇到 TLS 1.2 問題,無法存取https://api.nuget.org/v3/index.json即使我看到 TLS 1.2 已啟用,也可以透過 Internet Explorer 進行操作。
我有另一台具有相同作業系統和相同作業系統更新的伺服器(但沒有 IIS),並且該伺服器在使用 TLS 1.2 存取 API 或任何其他端點時沒有問題)
在有問題的伺服器上,我嘗試了以下操作:
- 使用 IISCrypto 啟用一切 -> 重新啟動 -> 失敗
- 按照 Microsoft 文件手動更改註冊表設定 -https://docs.microsoft.com/en-us/mem/configmgr/core/plan-design/security/enable-tls-1-2- 失敗的
- 使用以下腳本完全重設並僅重新啟用 TLS 1.2 - https://www.hass.de/content/setup-microsoft-windows-or-iis-ssl-perfect-forward-secrecy-and-tls-12- 失敗的
此時,我花了 3 天的時間嘗試排除故障,看看這兩台伺服器之間有什麼問題,為什麼一台 Windows 伺服器可以運作,而另一台卻不能。
任何提示、故障排除步驟或工具都將受到歡迎!
答案1
因此,經過數小時的故障排除,我終於能夠解決問題並透過 TLS 1.2 從我們的伺服器存取 API。
我們的伺服器上有 .net 框架,但存取 API 時遇到問題。 Microsoft 建議我們設定以下註冊表以強制 SystemDefaultTlsVersions
Windows Registry Editor Version 5.00
[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
[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
答案2
我的聲譽很低,所以我必須寫一個答案。
瀏覽器訊息可能會產生誤導
您應該驗證 DNS 是否解析相同的目標以及用戶端是否偵測到任何類型的代理程式。
它們可能是透過防火牆進行的封包檢查,也可能是使用透明代理。
驗證您在 openssl 中使用 s_client 得到的回應: https://stackoverflow.com/questions/7885785/using-openssl-to-get-the-certificate-from-a-server
使用瀏覽器中的 DeveloperTools 查看“網頁”並查看您的請求發送到何處(可能透過代理)以及您收到的回應。
在 Powershell 中停用某些 SSL/TLS 檢查: https://stackoverflow.com/questions/34331206/ignore-ssl-warning-with-powershell-downloadstring
驗證兩者俱有相同的 IPv6 網路配置。也許其中一個因此連接到另一台伺服器。
編輯:至少進行 openssl 檢查以確保您可以獲得正確的憑證。停用 Powershell 的 SSL/TLS 檢查並進行測試將有助於確定問題所在。