Подтвердить что ты не робот

Как работает цепочка цепочек сертификатов SSL?

Я создал цепочку иерархии, как это.

root-ca ==> signing-ca ==> subordinate-ca ==> server

Упоминается, что для создания пучка цепочек наименьшее должно идти первым.

$ cat server.crt subordinate-ca.crt signing-ca.crt > server.pem

Но проверка завершается неудачно.

$ openssl verify -CAfile root-ca.crt server.pem
error 20 at 0 depth lookup:unable to get local issuer certificate

Однако, если я изменю порядок, он, похоже, сработает.

$ cat signing-ca.crt subordinate-ca.crt server.crt > server.pem
$ openssl verify -CAfile root-ca.crt server.pem
server.pem: OK

Так в чем тут ошибка?

Цепочка после "cat" выглядит ниже.

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

Дополнительная информация: Согласно "http://www.herongyang.com/crypto/openssl_verify_2.html, я выполняю следующий тест, который работает.

$ cat signing-ca.crt subordinate-ca.crt > inter.crt
$ openssl verify -CAfile root-ca.crt -untrusted inter.crt server.crt
server.crt: OK

Означает ли это, что все ссылки хороши?

ОК, наконец, я обнаружил, что это невозможно сделать через командную строку OpenSSL (или, по крайней мере, легко). http://openssl.6102.n7.nabble.com/check-certificate-chain-in-a-pem-file-td43871.html

4b9b3361

Ответ 1

Первоначальный заказ на самом деле обратный. Сертификаты должны сопровождаться выдающим сертификатом до тех пор, пока последний сертификат не будет выпущен известным корнем за IETF RFC 5246 Раздел 7.4.2

Это последовательность (цепочка) сертификатов. Сертификат отправителя ДОЛЖЕН прийти первым в списке. Каждый следующий сертификат ДОЛЖЕН прямо удостоверяйте личность, предшествующую ей.

См. также SSL: ошибка: 0B080074: процедуры проверки x509: X509_check_private_key: несоответствие значений ключей для устранения неполадок.

Но я до сих пор не знаю, почему они написали спецификацию, так что порядок имеет значение.