Замена сертификата и ключа CA - PullRequest
0 голосов
/ 21 декабря 2018

Я управляю своим собственным ЦС с помощью openssl и использую его (и сертификаты, которые он подписывает) с stunnel.Из-за истечения срока действия сертификата CA я хочу иметь возможность генерировать новый сертификат CA и ключ (имеющий тот же dn, что и у старого сертификата) и настроить stunnel на доверие обоим в течение определенного периода времени, пока я развертываю этот новый CA.

Поскольку старый и новый CA-сертификаты имеют одинаковые имена, они имеют одинаковый хэш, поэтому я использую опцию stunnel -CApath, передавая каталог, содержащий как <hash>.0, так и <hash>.1.Я также пытался передать сертификаты CA через -CAfile, но, похоже, это не помогло.

Согласно документам openssl :

Сопоставление сертификата выполняется на основе имени субъекта, идентификатора ключа (если имеется) и серийного номера, взятого из сертификата, подлежащего проверке.Если эти данные не совпадают, будет испробован следующий сертификат.

Хотя имя субъекта CA совпадает, идентификатор ключа и серийный номер различаются, поэтому я ожидаю, что openssl справится с этимправильно во время согласования TLS.То есть сначала загрузите старый сертификат и, обнаружив, что он не совпадает с идентификатором ключа / серийным номером, загружающим новый сертификат.Поскольку это действительно совпадает, оно тогда выполнит проверку.Я знаю, что openssl загружает как старые, так и новые сертификаты.

Я вижу, что stunnel (конец настроен на client=no) отклоняет сертификат, подписанный новым ключом CA с помощью:

2018.12.21 05:24:46 LOG4[0]: CERT: Pre-verification error: certificate signature failure 2018.12.21 05:24:46 LOG4[0]: Rejected by CERT at depth=0: CN=down 2018.12.21 05:24:46 LOG7[0]: TLS alert (write): fatal: decrypt error 2018.12.21 05:24:46 LOG3[0]: error queue: 1417C086: error:1417C086:SSL routines:tls_process_client_certificate:certificate verify failed 2018.12.21 05:24:46 LOG3[0]: error queue: D0C5006: error:0D0C5006:asn1 encoding routines:ASN1_item_verify:EVP lib 2018.12.21 05:24:46 LOG3[0]: error queue: 4067072: error:04067072:rsa routines:rsa_ossl_public_decrypt:padding check failed 2018.12.21 05:24:46 LOG3[0]: SSL_accept: 407008A: error:0407008A:rsa routines:RSA_padding_check_PKCS1_type_1:invalid padding 2018.12.21 05:24:46 LOG5[0]: Connection reset: 0 byte(s) sent to TLS, 0 byte(s) sent to socket

Если новый CA имеет имя, отличное от старого CA, то все работает как положено, но документация подсказывает мне, что использование другого имени для нового сертификата не обязательно.Это то, что openssl и действительно поддерживает?Если так, что может быть не так с моими сертификатами или конфигурацией stunnel, чтобы это не работало?

...