Можно проверить сертификат только с промежуточным и корневым сертификатом в одном файле - PullRequest
1 голос
/ 25 сентября 2019

У меня есть два сертификата, отправленные сервером во время рукопожатия SSL, сертификат домена и промежуточный сертификат, подписанный DigiCert Global Root CA.Я могу проверить промежуточный сертификат

# openssl verify intermediate.pem
cert2.pem: OK

, но не сертификат домена

# openssl verify -CAfile intermediate.pem domain.pem
cert1.pem: C = US, O = DigiCert Inc, CN = DigiCert SHA2 Secure Server CA
error 2 at 1 depth lookup:unable to get issuer certificate

DigiCert SHA2 Secure Server CA является промежуточным сертификатом.Проверка работает, когда я объединяю как промежуточный, так и корневой сертификат

# openssl verify -CAfile combined.pem cert1.pem
cert1.pem: OK

Корневой сертификат присутствует в /etc/ssl/certs/ca-bundle.crt.Проблема появляется только в док-контейнере (на базе Centos 7), на хосте работает без проблем.Из-за этой проблемы проверки подлинности SSL рукопожатие терпит неудачу, и соединение с сервером разрывается.Что я могу сделать, чтобы исправить эту проблему?

1 Ответ

2 голосов
/ 25 сентября 2019
# openssl verify -CAfile intermediate.pem domain.pem
cert1.pem: C = US, O = DigiCert Inc, CN = DigiCert SHA2 Secure Server CA
error 2 at 1 depth lookup:unable to get issuer certificate

openssl ожидает построения цепочки доверия до доверенного корневого сертификата.Промежуточный сертификат может быть доверенным, но не является корневым (не самоподписанным).Это означает, что по умолчанию проверка не будет выполнена, если не предоставлен корневой сертификат.

В более новых версиях openssl verify есть опция -partial_chain, которая позволяет успешно завершить проверку, даже если она заканчивается доверенным сертификатом.если это не корневой сертификат.В библиотеке OpenSSL есть похожая опция X509_V_FLAG_PARTIAL_CHAIN.Но это должно быть явно разрешено приложением, то есть по умолчанию оно отключено.

Корневой сертификат присутствует в /etc/ssl/certs/ca-bundle.crt.Проблема появляется только в док-контейнере (на базе Centos 7), на хосте работает без проблем.Из-за этой проблемы проверки подлинности SSL рукопожатие терпит неудачу, и соединение с сервером разрывается.Что я могу сделать, чтобы решить эту проблему?

К сожалению, не ясно, находится ли корневой сертификат а) в контейнере докера, б) какое приложение у вас в контейнере и какой кодиспользуется для проверки сертификатов и c) если серверное приложение должным образом предоставляет все промежуточные сертификаты, как следует.Другими словами: то, что вы видите с помощью openssl verify, может не иметь ничего общего с тем, что вы испытываете с неизвестным приложением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...