Iis

Chrome 報告 ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY 通過 HTTPS 連接到本地 Web 伺服器

  • December 22, 2021

概括

ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY當我嘗試通過 HTTPS 連接到本地 Web 伺服器時,Chrome 會報告。我幾乎可以肯定這個問題與我最近的 Windows 10 升級有關,但我不知道如何解決它。

什麼有效

這是一系列事件,我一開始就安裝了 Windows 8.1 Pro:

  1. 使用以下命令生成了一個自簽名證書,用作受信任的根 CA:makecert.exe -pe -ss Root -sr LocalMachine -n "CN=local, OU=development" -r -a sha512 -e 01/01/2020
  2. 從受信任的根 CA 生成了特定於應用程序的證書:makecert.exe -pe -ss My -sr LocalMachine -n "CN=myapp.local, OU=Development" -is Root -ir LocalMachine -in local -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 -a sha512 -e 01/01/2020 -sky -eku 1.3.6.1.5.5.7.3.1
  3. 添加了指向的HOSTS文件條目myapp.local``127.0.0.1
  4. 創建了一個綁定到myapp.local域並僅偵聽 HTTPS 請求的 IIS 8.5 應用程序
  5. 將證書分配myapp.local給網站

使用此設置,我可以在沒有任何證書或安全警告的情況下從 Chrome 訪問我的本地網站。正如預期的那樣,瀏覽器顯示綠色掛鎖。

什麼不起作用

最近升級到了Windows 10,當時並不知道Windows 10自帶IIS 10,支持HTTP/2。現在,當我嘗試使用 Chrome 訪問我的本地網站時,我收到一個ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY錯誤消息。我應該注意,從 Edge 發送的相同請求不會導致錯誤,並且確實使用 HTTP/2 進行連接。粗略的Google搜尋並沒有發現任何有希望的東西,只是暗示問題可能是 HTTP/2 或 Chrome 對它在 SSL 證書中接受的密碼非常嚴格。

認為這可能是 Windows 中啟用的密碼套件的問題(但不是此類事情的專家),我下載了最新版本的IIS Crypto。我點擊了最佳實踐按鈕,點擊了應用,然後重新啟動了我的機器。

IIS Crypto 將這些設置報告為“最佳實踐”:

  • 啟用的協議:TLS 1.0、TLS 1.1、TLS 1.2
  • 啟用的密碼:三重 DES 168、AES 128/128、AES 256/256
  • 啟用雜湊:MD5、SHA、SHA 256、SHA 384、SHA 512
  • 啟用密鑰交換:Diffie-Hellman、PKCS、ECDH
  • SSL 密碼套件順序:

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P521

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P521

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P284

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P521

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P284

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P521

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P284

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256

TLS_RSA_WITH_AES_256_GCM_SHA384

TLS_RSA_WITH_AES_128_GCM_SHA256

TLS_RSA_WITH_AES_256_CBC_SHA256

TLS_RSA_WITH_AES_256_CBC_SHA

TLS_RSA_WITH_AES_128_CBC_SHA256

TLS_RSA_WITH_AES_128_CBC_SHA

TLS_RSA_WITH_3DES_EDE_CBC_SHA

我還要補充一點,我正在開發的瀏覽器應用程序不需要在 Windows XP 中可用。我知道 Windows XP 存在一些不支持較新協議的問題。

HTTPS協商的詳細資訊

我決定使用 Fiddler 來攔截 HTTPS 協商。以下是 Fiddler 報告的有關請求的內容:

Version: 3.3 (TLS/1.2)
Random: 6B 47 6D 2B BC AE 00 F1 1D 41 57 7C 46 DB 35 19 D7 EF A9 2B B1 D0 81 1D 35 0D 75 7E 4C 05 14 B0
"Time": 2/1/1993 9:53:15 AM
SessionID: 98 2F 00 00 15 E7 C5 70 12 70 CD A8 D5 C7 D4 4D ED D8 1F 42 F9 A8 2C E6 67 13 AD C0 47 C1 EA 04
Extensions: 
   server_name myapp.local
   extended_master_secret  empty
   SessionTicket   empty
   signature_algs  sha512_rsa, sha512_ecdsa, sha384_rsa, sha384_ecdsa, sha256_rsa, sha256_ecdsa, sha224_rsa, sha224_ecdsa, sha1_rsa, sha1_ecdsa
   status_request  OCSP - Implicit Responder
   NextProtocolNego    empty
   SignedCertTimestamp (RFC6962)   empty
   ALPN        http/1.1, spdy/3.1, h2-14, h2
   channel_id(GoogleDraft) empty
   ec_point_formats    uncompressed [0x0]
   elliptic_curves secp256r1 [0x17], secp384r1 [0x18]
Ciphers: 
   [C02B]  TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
   [C02F]  TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
   [009E]  TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
   [CC14]  TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
   [CC13]  TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
   [CC15]  TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256
   [C00A]  TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
   [C014]  TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA
   [0039]  TLS_DHE_RSA_WITH_AES_256_SHA
   [C009]  TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
   [C013]  TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA
   [0033]  TLS_DHE_RSA_WITH_AES_128_SHA
   [009C]  TLS_RSA_WITH_AES_128_GCM_SHA256
   [0035]  TLS_RSA_AES_256_SHA
   [002F]  TLS_RSA_AES_128_SHA
   [000A]  SSL_RSA_WITH_3DES_EDE_SHA
   [00FF]  TLS_EMPTY_RENEGOTIATION_INFO_SCSV

Compression: 
   [00]    NO_COMPRESSION

和回應:

Version: 3.3 (TLS/1.2)
SessionID:  98 2F 00 00 15 E7 C5 70 12 70 CD A8 D5 C7 D4 4D ED D8 1F 42 F9 A8 2C E6 67 13 AD C0 47 C1 EA 04
Random:     55 C6 8D BF 78 72 88 41 34 BD B4 B8 DA ED D3 C6 20 5C 46 D6 5A 81 BD 6B FC 36 23 0B 15 21 5C F6
Cipher:     TLS_RSA_WITH_AES_128_GCM_SHA256 [0x009C]
CompressionSuite:   NO_COMPRESSION [0x00]
Extensions:
       ALPN        h2
       0x0017      empty
       renegotiation_info  00
       server_name empty

什麼工作

根據 Håkan Lindqvist 的回答,以及非常詳細且經過徹底研究的回答我使用以下設置重新配置了 IIS Crypto,從而消除了 Chrome 錯誤:

  • 啟用的協議:TLS 1.0、TLS 2.0、TLS 3.0
  • 啟用的密碼:AES 128/128、AES 256/256
  • 啟用雜湊:SHA、SHA 256、SHA 384、SHA 512
  • 啟用密鑰交換:Diffie-Hellman、PKCS、ECDH
  • SSL 密碼套件順序:

TLS_DHE_RSA_WITH_AES_256_GCM_SHA384

TLS_DHE_RSA_WITH_AES_128_GCM_SHA256

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P521

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384

TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P521

TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P384

TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256

TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P521

TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384

TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P521

TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P384

TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256

TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P521

TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P384

TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256

TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P521

TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P384

TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P521

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P521

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P384

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P521

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P521

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P384

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256

TLS_RSA_WITH_AES_256_GCM_SHA384

TLS_RSA_WITH_AES_128_GCM_SHA256

TLS_RSA_WITH_AES_256_CBC_SHA256

TLS_RSA_WITH_AES_128_CBC_SHA256

TLS_RSA_WITH_AES_256_CBC_SHA

TLS_RSA_WITH_AES_128_CBC_SHA

根據https://httpwg.org/specs/rfc7540.html#rfc.section.9.2.2的 Http/2 要求:

9.2.2 TLS 1.2 密碼套件

通過 TLS 1.2 部署 HTTP/2 不應使用密碼套件黑名單(附錄 A)中列出的任何密碼套件。

如果黑名單中的密碼套件之一被協商,端點可以選擇生成 INADEQUATE_SECURITY 類型的連接錯誤(第 5.4.1 節)。選擇使用黑名單密碼套件的部署有觸發連接錯誤的風險,除非已知潛在對等點集接受該密碼套件。

對於不在黑名單上的密碼套件的協商,實現不得生成此錯誤。因此,當客戶端提供不在黑名單上的密碼套件時,他們必須準備好將該密碼套件與 HTTP/2 一起使用。

黑名單包括 TLS 1.2 強制使用的密碼套件,這意味著 TLS 1.2 部署可能具有不相交的允許密碼套件集。為避免此問題導致 TLS 握手失敗,使用 TLS 1.2 的 HTTP/2 部署必須支持 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

$$ TLS-ECDHE $$P-256 橢圓曲線$$ FIPS186 $$. 請注意,客戶端可能會宣傳對黑名單上的密碼套件的支持,以允許連接到不支持 HTTP/2 的伺服器。這允許伺服器使用 HTTP/2 黑名單上的密碼套件選擇 HTTP/1.1。但是,如果獨立選擇應用程序協議和密碼套件,這可能會導致 HTTP/2 與列入黑名單的密碼套件進行協商。

您協商的密碼“TLS_RSA_WITH_AES_128_GCM_SHA256”在上面提到的(和連結的)Http/2 黑名單中。 我相信您會想要調整密碼套件(訂購?)以滿足上述要求。也許只是簡單地將TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256NISTP-256橢圓曲線(TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256_P256在 Windows 上標識)放在列表​​頂部,或者至少在黑名單中包含的任何內容之前?

引用自:https://serverfault.com/questions/712808