
我有一個需要 mTLS(客戶端憑證驗證)的 https 伺服器。當我嘗試在 Windows 10 上使用 Chrome(版本 75.0.3770.100(官方版本)(64 位元))存取伺服器時,它要求我選擇客戶端憑證(我這樣做了)。之後 chrome 傳回 ERR_NOT_IMPLMENTED。
附加資訊:
- 我可以使用 IE11、Edge 和 Firefox 中的相同 URL 存取伺服器
- 建立對伺服器憑證的信任 CA 憑證(將 CA 匯入受信任的根憑證授權單位儲存)。連線在 IE 中被標記為安全。
- 擷取的 chrome 網誌。我可以在這裡找到問題:
t=3200 [st=10] SSL_HANDSHAKE_MESSAGE_RECEIVED
--> bytes =
0E 00 00 00 .
--> type = 14
t=3200 [st=10] SSL_CLIENT_CERT_REQUESTED
t=3201 [st=11] SSL_HANDSHAKE_ERROR
--> error_lib = 16
--> error_reason = 228
--> file = "../../third_party/boringssl/src/ssl/ssl_cert.cc"
--> line = 242
--> net_error = -11 (ERR_NOT_IMPLEMENTED)
--> ssl_error = 1
t=3201 [st=11] -SSL_CONNECT
--> net_error = -11 (ERR_NOT_IMPLEMENTED)
t=3201 [st=11] SOCKET_CLOSED
ssl_cert.cc:242
我查看了BoringSSL的源代碼https://github.com/google/boringssl/blob/d6f9c359d219055a89c676cb8886421b145a08da/ssl/ssl_cert.cc#L242。
這裡的相關程式碼似乎是:
bool ssl_is_key_type_supported(int key_type) {
return key_type == EVP_PKEY_RSA || key_type == EVP_PKEY_EC ||
key_type == EVP_PKEY_ED25519;
}
或者換句話說。如果它是 RSA 證書,則該函數應傳回 true,並且不應導致上述錯誤。
知道這裡出了什麼問題嗎?
謝謝。