
У меня есть https-сервер, который требует mTLS (проверка подлинности клиентского сертификата). Когда я пытаюсь получить доступ к серверу с помощью Chrome (версия 75.0.3770.100 (официальная сборка) (64-бит)) на Windows 10, он просит меня выбрать клиентский сертификат (что я и делаю). После этого Chrome возвращает ошибку ERR_NOT_IMPLEMENTED.
Дополнительная информация:
- Я могу получить доступ к серверу, используя тот же URL из IE11, Edge и Firefox.
- Установлено доверие к сертификатам сервера CA cert (импортировал 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 и не должна приводить к вышеописанной ошибке.
Есть идеи, что здесь не так?
Спасибо.