Tóm lược
Chrome đang báo cáo ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY
khi tôi thử và kết nối với máy chủ web cục bộ của mình qua HTTPS. Tôi gần như chắc chắn vấn đề này liên quan đến bản nâng cấp Windows 10 gần đây của tôi, nhưng tôi không biết cách khắc phục.
Những gì đã làm việc
Đây là chuỗi sự kiện, với tôi đã cài đặt Windows 8.1 Pro khi bắt đầu:
- Tạo chứng chỉ tự ký dự định sử dụng làm CA gốc đáng tin cậy bằng lệnh sau:
makecert.exe -pe -ss Root -sr LocalMachine -n "CN=local, OU=development" -r -a sha512 -e 01/01/2020
- Tạo chứng chỉ dành riêng cho ứng dụng từ CA gốc đáng tin cậy:
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
- Đã thêm một
HOSTS
mục nhập tệp chomyapp.local
các điểm đó vào127.0.0.1
- Đã tạo một ứng dụng IIS 8.5 được liên kết với
myapp.local
miền và chỉ lắng nghe các yêu cầu HTTPS - Đã gán
myapp.local
chứng chỉ cho trang web
Với thiết lập này, tôi không gặp khó khăn khi truy cập trang web địa phương của mình từ Chrome mà không có bất kỳ cảnh báo chứng nhận hoặc bảo mật nào. Trình duyệt hiển thị ổ khóa màu xanh lá cây, như mong đợi.
Những gì không làm việc
Gần đây, tôi đã nâng cấp lên Windows 10. Lúc đó tôi không biết rằng Windows 10 có kèm theo IIS 10, hỗ trợ HTTP / 2. Bây giờ, khi tôi thử và truy cập các trang web địa phương của mình bằng Chrome, tôi đã ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY
gặp lỗi. Tôi nên lưu ý rằng cùng một yêu cầu được gửi từ Edge không gây ra lỗi và sử dụng HTTP / 2 cho kết nối. Một tìm kiếm đáng chú ý của Google đã không đưa ra bất cứ điều gì hứa hẹn, ngoại trừ gợi ý rằng vấn đề có thể là HTTP / 2 hoặc Chrome nghiêm ngặt về những mật mã mà nó sẽ chấp nhận trong chứng chỉ SSL.
Nghĩ rằng nó có thể là một vấn đề với các bộ mật mã được kích hoạt trong Windows (nhưng không phải là một chuyên gia về những thứ như vậy), tôi đã tải xuống phiên bản mới nhất của IIS Crypto . Tôi đã nhấp vào nút Thực tiễn tốt nhất, nhấp vào Áp dụng và khởi động lại máy của mình.
IIS Crypto báo cáo các cài đặt này là "thực tiễn tốt nhất":
- Các giao thức được kích hoạt: TLS 1.0, TLS 1.1, TLS 1.2
- Các mật mã được kích hoạt: Triple DES 168, AES 128/128, AES 256/256
- Băm kích hoạt: MD5, SHA, SHA 256, SHA 384, SHA 512
- Trao đổi khóa được kích hoạt: Diffie-Hellman, PKCS, ECDH
Thứ tự bộ mật mã 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
Tôi cũng sẽ thêm rằng ứng dụng trình duyệt tôi đang phát triển không cần sử dụng được từ Windows XP. Tôi biết có một số vấn đề về Windows XP không hỗ trợ các giao thức mới hơn.
Thông tin chi tiết về đàm phán HTTPS
Tôi quyết định sử dụng Fiddler để chặn cuộc đàm phán HTTPS. Đây là những gì Fiddler đã báo cáo về yêu cầu:
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
và câu trả lời:
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
Làm việc gì
Dựa trên câu trả lời của Håkan Lindqvist và câu trả lời được nghiên cứu rất chi tiết và rõ ràng ở đây , tôi đã cấu hình lại IIS Crypto với các cài đặt sau, loại bỏ lỗi Chrome:
- Các giao thức được kích hoạt: TLS 1.0, TLS 2.0, TLS 3.0
- Mật mã được bật: AES 128/128, AES 256/256
- Băm kích hoạt: SHA, SHA 256, SHA 384, SHA 512
- Trao đổi khóa được kích hoạt: Diffie-Hellman, PKCS, ECDH
Thứ tự bộ mật mã 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
makecert.exe
được sự phản đối. Tôi chỉ sử dụng nó cho các tình huống phát triển như thế này vì đây là tùy chọn dễ nhất mà [đã từng sử dụng?] Hoạt động.