สรุป
Chrome รายงานERR_SPDY_INADEQUATE_TRANSPORT_SECURITY
เมื่อฉันพยายามเชื่อมต่อกับเว็บเซิร์ฟเวอร์ในพื้นที่ของฉันผ่าน HTTPS ฉันเกือบจะแน่ใจว่าปัญหานี้เกี่ยวข้องกับการอัพเกรด Windows 10 ล่าสุดของฉัน แต่ฉันไม่ทราบวิธีการแก้ไข
ทำงานอะไร
นี่คือเหตุการณ์ที่เกิดขึ้นโดยที่ฉันติดตั้ง Windows 8.1 Pro ตอนเริ่มต้น:
- สร้างใบรับรองที่ลงนามเองเพื่อใช้เป็น root CA ที่ไว้วางใจโดยใช้คำสั่งต่อไปนี้:
makecert.exe -pe -ss Root -sr LocalMachine -n "CN=local, OU=development" -r -a sha512 -e 01/01/2020
- สร้างใบรับรองเฉพาะแอปพลิเคชันจากรูต 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
- เพิ่ม
HOSTS
รายการไฟล์สำหรับmyapp.local
จุดนั้น127.0.0.1
- สร้างแอปพลิเคชัน IIS 8.5 ที่เชื่อมโยงกับ
myapp.local
โดเมนและรับฟังคำขอ HTTPS เท่านั้น - กำหนด
myapp.local
ใบรับรองให้กับเว็บไซต์
ด้วยการตั้งค่านี้ฉันไม่มีปัญหาในการเข้าถึงเว็บไซต์ท้องถิ่นของฉันจาก Chrome โดยไม่มีใบรับรองหรือคำเตือนความปลอดภัย เบราว์เซอร์แสดงกุญแจสีเขียวตามที่คาดไว้
อะไรไม่ทำงาน
เมื่อเร็ว ๆ นี้ฉันอัพเกรดเป็น Windows 10 ฉันไม่ทราบว่าในขณะที่ Windows 10 มาพร้อมกับ IIS 10 ซึ่งรองรับ HTTP / 2 ตอนนี้เมื่อฉันลองและเข้าถึงเว็บไซต์ในพื้นที่ด้วย Chrome ฉันได้รับERR_SPDY_INADEQUATE_TRANSPORT_SECURITY
ข้อผิดพลาด ฉันควรทราบว่าคำขอเดียวกันที่ส่งมาจาก Edge ไม่ส่งผลให้เกิดข้อผิดพลาดและใช้ HTTP / 2 สำหรับการเชื่อมต่อ การค้นหาโดย Google คร่าวๆไม่ได้ทำให้เกิดสัญญาอะไรขึ้นนอกจากจะบอกใบ้ว่าปัญหาอาจเป็นได้ว่า HTTP / 2 หรือ Chrome นั้นเข้มงวดกับสิ่งที่ ciphers จะยอมรับในใบรับรอง SSL
คิดว่าอาจเป็นปัญหากับชุดรหัสเปิดใช้งานใน Windows (แต่ไม่ได้เป็นผู้เชี่ยวชาญในเรื่องดังกล่าว) ฉันดาวน์โหลดเวอร์ชันล่าสุดของ IIS Crypto ฉันคลิกปุ่มวิธีปฏิบัติที่ดีที่สุดคลิกนำไปใช้และรีสตาร์ทเครื่อง
IIS Crypto รายงานการตั้งค่าเหล่านี้เป็น "แนวทางปฏิบัติที่ดีที่สุด":
- โปรโตคอลที่เปิดใช้งาน: TLS 1.0, TLS 1.1, TLS 1.2
- ciphers ที่เปิดใช้งาน: Triple 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_128_CBC_SHA256 TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA
ฉันจะเพิ่มด้วยว่าแอปพลิเคชันเบราว์เซอร์ที่ฉันกำลังพัฒนาไม่จำเป็นต้องใช้งานได้จาก Windows XP ฉันรู้ว่ามีปัญหาบางอย่างเกี่ยวกับ Windows XP ที่ไม่รองรับโปรโตคอลใหม่
ข้อมูลรายละเอียดเกี่ยวกับการเจรจา HTTPS
ฉันตัดสินใจใช้พู้ทำเล่นเพื่อสกัดกั้นการเจรจา 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_128_CBC_SHA_P521
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256
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
makecert.exe
เลิกใช้แล้ว ฉันใช้เพื่อการพัฒนาสถานการณ์เช่นนี้เท่านั้นเพราะเป็นตัวเลือกที่ง่ายที่สุดที่ [เคยใช้หรือไม่] ใช้งานได้