У меня есть работающая система c ++, где я устанавливаю ssl-соединение между клиентом и сервером, используя библиотеку openssl C с обеих сторон.
Система использует аутентификацию клиента, требуя в качестве части сертификата клиентасвязи.Сертификат клиента самоподписан, он проверяется на сервере с помощью ca.pem системы, подписывающей самоподписанные сертификаты.
Сертификат сервера выдан digikey.
Myпонимание состоит в том, что нет никакой связи между проверкой клиентом сертификата сервера (который он проверяет на стороне клиента) и проверкой сервером сертификата клиента [самоподписанный], который проверяется на сервере с моим предоставленным ca.pem.
Однако я сталкиваюсь с проблемой, когда меняю сертификат сервера на сертификат, подписанный letsencrypt.
Я получаю эту ошибку, принимая соединения:
ошибка: 14094418:Подпрограммы SSL: ssl3_read_bytes: предупреждение tlsv1 неизвестно ca: s3_pkt.c: 1487: номер предупреждения SSL 48
Неизвестный CA.Аааа, но какой?
Я попытался удалить требование сертификата клиента в качестве теста и смог установить соединение, поэтому ясно, что клиент счастлив проверить новый сертификат сервера letsencrypt.
Поэтому может показаться, что серверу не удалось проверить сертификат клиента.Но это не имеет смысла, так как ничего из этого не изменилось, сертификат клиента такой же, и ca.pem сервера для проверки того же сертификата одинаков.
Почему изменение сертификата сервера влияет на то, как клиентСертификат проверен?
Есть ли что-то в запросе, который сервер отправляет клиенту, запрашивая сертификат клиента, включая "letencrypt" для субъекта или что-то в этом роде?Я немного запутался в том, как работает запрос сертификата клиента.
Есть ли способ получить больше информации об ошибке ssl, более подробное ведение журнала из библиотеки?
У меня естьзапустите в командной строке команды openssl verify, чтобы вручную проверить, что список доверенных корней клиента ca.pem может проверить сертификат letsencrypt и что сервер ca.pem может проверить сертификат клиента (как всегда)
Так .... что я делаю не так?
Есть идеи?предложения?Что попробовать?
Спасибо.
ОБНОВЛЕНИЕ:
Итак, мне пришлось пересобрать openssl, но я получил трассировку и на стороне сервера, я получаю это:
Received Record
Header:
Version = TLS 1.2 (0x303)
Content Type = Alert (21)
Length = 2
Level=fatal(2), description=unknown CA(48)
, что заставляет меня поверить, что проблема на стороне клиента.Предыдущее сообщение было отправлено с сервера:
Sent Record
Header:
Version = TLS 1.2 (0x303)
Content Type = Handshake (22)
Length = 46
CertificateRequest, Length=38
certificate_types (len=3)
rsa_sign (1)
dss_sign (2)
ecdsa_sign (64)
signature_algorithms (len=30)
sha512+rsa (6+1)
sha512+dsa (6+2)
sha512+ecdsa (6+3)
sha384+rsa (5+1)
sha384+dsa (5+2)
sha384+ecdsa (5+3)
sha256+rsa (4+1)
sha256+dsa (4+2)
sha256+ecdsa (4+3)
sha224+rsa (3+1)
sha224+dsa (3+2)
sha224+ecdsa (3+3)
sha1+rsa (2+1)
sha1+dsa (2+2)
sha1+ecdsa (2+3)
certificate_authorities (len=0)
Так что это означает, что сервер не предлагает никаких предложений относительно того, для чего должны соответствовать сертификаты клиента, а клиенту это не нравится?Не уверен, что это помогает, за исключением того, что указывает на тот факт, что проблема, скорее всего, на клиенте.