Chrome, HTTPS üzerinden yerel web sunucusuna ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY bağlandığını bildirdi


20

özet

ERR_SPDY_INADEQUATE_TRANSPORT_SECURITYHTTPS üzerinden yerel web sunucuma bağlanmaya çalıştığımda Chrome rapor veriyor. Bu sorunun son Windows 10 yükseltmemle ilgili olması gerektiğinden neredeyse eminim, ancak nasıl düzeltileceğini bilmiyorum.

Ne işe yaradı

İşte Windows 8.1 Pro'nun başında yüklü olduğu olaylar zinciri:

  1. Aşağıdaki komutu kullanarak güvenilir bir kök CA olarak kullanılmak üzere kendinden imzalı bir sertifika oluşturdu: makecert.exe -pe -ss Root -sr LocalMachine -n "CN=local, OU=development" -r -a sha512 -e 01/01/2020
  2. Güvenilen kök CA'dan uygulamaya özgü bir sertifika oluşturuldu: 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. Bu nokta için bir HOSTSdosya girişi eklendimyapp.local127.0.0.1
  4. myapp.localEtki alanına bağlı olan ve yalnızca HTTPS isteklerini dinleyen bir IIS 8.5 uygulaması oluşturuldu
  5. myapp.localWeb sitesine sertifika atandı

Bu kurulumla, herhangi bir sertifika veya güvenlik uyarısı olmadan yerel web siteme Chrome'dan erişmekte sorun yaşamadım. Tarayıcı, beklendiği gibi yeşil asma kilit görüntüledi.

Ne işe yaramaz

Son zamanlarda, Windows 10'a geçtim. Windows 10'un HTTP / 2'yi destekleyen IIS 10 ile birlikte geldiğini bilmiyordum. Artık Chrome ile yerel web sitelerime erişmeye çalıştığımda bir ERR_SPDY_INADEQUATE_TRANSPORT_SECURITYhata alıyorum. Edge'den gönderilen aynı isteğin bir hataya neden olmadığını ve bağlantı için HTTP / 2 kullandığını unutmayın. Bir cursory Google araması, sorunun HTTP / 2 veya Chrome'un SSL sertifikalarında hangi şifreleri kabul edeceği konusunda katı olması olabileceğine dair ipucu dışında umut verici bir şey ortaya koymadı.

Windows'da etkin şifre paketleriyle ilgili bir sorun olabileceğini düşünüyoruz (ancak bu tür konularda uzman olmamakla birlikte), IIS Crypto'nun en son sürümünü indirdim . En İyi Uygulamalar düğmesini tıkladım, Uygula'yı tıkladım ve makinemi yeniden başlattım.

IIS Kripto bu ayarları "en iyi uygulamalar" olarak bildirir:

  • Etkin protokoller: TLS 1.0, TLS 1.1, TLS 1.2
  • Etkin şifreler: Üçlü DES 168, AES 128/128, AES 256/256
  • Etkin karmalar: MD5, SHA, SHA 256, SHA 384, SHA 512
  • Etkin anahtar değişimleri: Diffie-Hellman, PKCS, ECDH
  • SSL şifre paketi siparişi:

    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

Ben de geliştiriyorum tarayıcı uygulaması olmadığını ekleyeceğiz değil Windows XP'den kullanılabilir olması gerekir. Windows XP'nin daha yeni protokolleri desteklememesi ile ilgili bazı sorunlar olduğunu biliyorum.

HTTPS görüşmesi hakkında ayrıntılı bilgi

HTTPS görüşmesini durdurmak için Fiddler'ı kullanmaya karar verdim. Fiddler, istek hakkında şunları bildirdi:

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

ve yanıt:

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

Ne çalışıyor

Håkan Lindqvist cevabı dayanarak ve çok detaylı ve görünüşe-iyice araştırılmış cevap burada , Chrome hatasını ortadan aşağıdaki ayarları ile IIS Kripto yeniden:

  • Etkin protokoller: TLS 1.0, TLS 2.0, TLS 3.0
  • Etkin şifreler: AES 128/128, AES 256/256
  • Etkin karmalar: SHA, SHA 256, SHA 384, SHA 512
  • Etkin anahtar değişimleri: Diffie-Hellman, PKCS, ECDH
  • SSL şifre paketi siparişi:

    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


Birisi bariz olana dikkat çekmeden önce: Evet, makecert.exekullanımdan kaldırıldığının farkındayım . Sadece böyle geliştirme senaryoları için kullanıyorum, çünkü [eskiden?] Çalışmasının en kolay yolu bu.
NathanAldenSr

Muhtemelen şifre değil, etkin olan ssl / tls sürümü. Tls v1.0 veya daha düşük sürüm etkin mi?
Drifter104

Soruyu, bu ayarları kontrol etmek için IIS Kripto ile yaptığımı içerecek şekilde güncelledim. Ayarların HTTP / 2 ve Chrome için çok izin verilip verilmediğini biliyor musunuz?
NathanAldenSr

stackoverflow.com/questions/31746620/… yardımcı olabilir. Görünüşe göre tarayıcıda casus devre dışı bırakmak için yoludur
Drifter104

1
Sürüm 2.0'daki IIS Kripto "En İyi Uygulamalar" bu hatayı benim için düzeltti. Belirttiğiniz paket siparişini kullanmayı denedim ama hiçbir etkisi olmadı. Görünüşe göre, Windows veya IIS Kripto'da yol boyunca bir yerde düzeltildi. :)
ahwm

Yanıtlar:


21

Https://http2.github.io/http2-spec/#rfc.section.9.2.2 uyarınca Http / 2 gereksinimleri :

9,2,2 TLS 1,2 Şifre Suitleri

HTTP / 2'nin TLS 1.2 üzerinde dağıtımı, şifre paketi kara listesinde ( Ek A ) listelenen şifre paketlerini KULLANMAMALIDIR .

Son noktalar, kara listeden şifre paketlerinden biri üzerinde anlaşmaya varılırsa, INADEQUATE_SECURITY türünde bir bağlantı hatası (Bölüm 5.4.1) oluşturmayı seçebilir. Kara listeye alınan bir şifreleme paketi kullanmayı seçen bir dağıtım, potansiyel eşler kümesinin bu şifreleme paketini kabul ettiği bilinmediği sürece bağlantı hatasını tetikleme riskiyle karşı karşıya kalır.

Uygulamalar, kara listede olmayan bir şifre paketinin görüşmesine tepki olarak bu hatayı OLMAMALIDIR. Sonuç olarak, istemciler kara listede olmayan bir şifreleme paketi sunduğunda, bu şifreleme paketini HTTP / 2 ile kullanmaya hazır olmalıdırlar.

Kara liste, TLS 1.2'nin zorunlu kıldığı şifre paketini içerir, bu da TLS 1.2 dağıtımlarının kesişmeyen izin verilen şifre paketleri kümeleri olabileceği anlamına gelir. TLS el sıkışma hatalarına neden olan bu sorunu önlemek için, TLS 1.2 kullanan HTTP / 2 dağıtımlarının P-256 eliptik eğrisi [FIPS186] ile TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 [TLS-ECDHE] 'yi desteklemesi GEREKİR.

İstemcilerin, HTTP / 2'yi desteklemeyen sunuculara bağlantıya izin vermek için kara listede bulunan şifre paketlerinin desteğini tanıtabileceğini unutmayın. Bu, sunucuların HTTP / 2 kara listesindeki bir şifre paketiyle HTTP / 1.1 seçmesine olanak tanır. Bununla birlikte, uygulama protokolü ve şifre takımı bağımsız olarak seçilirse HTTP / 2'nin kara listeye alınan bir şifre takımı ile görüşülmesine neden olabilir.


Müzakere edilen şifreniz TLS_RSA_WITH_AES_128_GCM_SHA256yukarıda belirtilen (ve bağlantılı) Http / 2 kara listesinde.

Yukarıdaki gereksinimleri karşılamak için şifre paketlerinizi (sipariş?) Ayarlamak isteyeceğinize inanıyorum. Belki de listenin en üstüne ya da en azından kara listeye dahil olan herhangi bir şeyden önce TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256NIST P-256eliptik eğrisini ( TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256_P256Windows'ta tanımlandığı gibi ) koyarak ?


Bunu hemen deneyeceğim ve nasıl ortaya çıktığını size bildireceğim. Detaylı cevap için teşekkürler! :) Dürüst olmak gerekirse, bu şifre paketi sorunu HTTP / 2 ile aynı anda HTTP / 1.1 ile aynı anda, tarayıcılar tutarsızlıklar üzerinde çalışacağı garanti edilene kadar, imkansız değilse, gerçekten zor olabilir gibi görünüyor. IPv4 / IPv6, kimse var mı?
NathanAldenSr

IIS Kripto'nun "en iyi uygulamalar" şifreleme paketi listesini kara listeyle karşılaştırdım. Bulduğum şey, en iyi pratik TLS_RSAşifre paketlerinin kara listede olması. Hepsini devre dışı bıraktım ve yeniden başlattım. Ancak, artık herhangi bir tarayıcı ile yerel web siteme güvenli bir bağlantı kuramıyorum . Sadece anladım ERR_CONNECTION_RESET. Bunun sertifikaların kendileriyle bir ilgisi olabilir mi?
NathanAldenSr

@NathanAldenSr Kara listeye alınmamış şifreleri daha yüksek önceliğe sahip olduğu sürece kara listeye alınan şifreleri kaldırmanız gerektiğini düşünmüyorum (HTTP / 1.x istemcileri için uyumluluk amacıyla yararlı olabilirler). Özellikle, tüm HTTP / 2 dağıtımlarının ( ) desteklemesi ZORUNLUDURTLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 .
Håkan Lindqvist

1
Başlangıç ​​noktası için teşekkürler. Benim için neyin işe yaradığını göstermek için cevabımı güncelledim.
NathanAldenSr

1
Not HTTP / 2 Spec 's TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 diyor ile : dize anlam P-256 eliptik eğri [FIPS186] TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256_P256Windows için.
Bart Verkoeijen

2

IIS'de HTTP / 2'yi geçici olarak devre dışı bırakmak için oluşturduğum bazı PowerShell:

Set-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\HTTP\Parameters -Name EnableHttp2Tls -Value 0 -Type DWord
Set-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\HTTP\Parameters -Name EnableHttp2Cleartext -Value 0 -Type DWord

HTTP / 2'nin devre dışı bırakılması sorunun tek "çözümü" gibi göründüğünden bu soruyu yanıtlıyorum. Yine de kabul etmeyeceğim, çünkü IIS 10'da HTTP / 2'yi tüm tarayıcılarda güvenilir bir şekilde kullanmak istiyorum.


Şifre takımlarınızı (muhtemelen sadece sipariş) Http / 2 teknik özelliklerini karşılayacak şekilde ayarlamak sorunu düzgün bir şekilde çözmelidir. (Ayrı cevaba bakınız)
Håkan Lindqvist

3
Bu değişikliklerin etkili olması için Windows'u yeniden başlatmanız gerekiyor gibi görünüyor . Sadece aramak iisresetbenim için hile yapmadı.
Sebastian Krysmanski

-1

Uygun bir CA'dan bir sertifika alın, ücretsiz olanlar ( StartSSL ) vardır ve bir sertifika almak çok daha uzun sürmez.

Uygun bir sertifika kullanırken Windows 10'da IIS 10 ve Chrome ile HTTP / 2 kullanmakta sorun yaşamadım.


1
Maalesef bu benim için işe yaramayacak. Hem yerel hem de geliştirme ortamları için bu sertifikaları üreten otomatik komut dosyalarına sahibim ve her geliştiricinin iş istasyonunun bunlara ihtiyacı var. Ayrıca, yeni sertifikalar almak için üçüncü bir tarafa geri dönmek zorunda kalmadan ana makine adlarını değiştirebilme esnekliğinin olmasını istiyorum.
NathanAldenSr

@NathanAldenSr - Anlıyorum. Tamamen kodlanmış bir işlem için yerel bir dahili CA kullanıyoruz. makecert.exeKendi kendine yaratılan certs'in problem olup olmadığını bilmek güzel olurdu . Hiç makecert.exe kullanmadım, her zaman yerel bir CA'nın çok daha temiz bir çözüm olduğunu düşündüm.
Peter Hahndorf
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.