我有一个需要 mTLS(客户端证书身份验证)的 https 服务器。当我尝试使用 Windows 10 上的 Chrome(版本 75.0.3770.100(官方版本)(64 位))访问服务器时,它要求我选择客户端证书(我选择了)。之后 chrome 返回 ERR_NOT_IMPLEMENTED。
附加信息:
- 我可以使用相同的 URL 从 IE11、Edge 和 Firefox 访问服务器
- 已建立对服务器证书 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,并且不会导致上述错误。
知道这里出了什么问题吗?
谢谢。