Я создал цепочку сертификатов PEM (CA, промежуточный и конечный), используя pyopenssl
, и я хотел подтвердить, что все правильно определил.
Вот шаги, которые я предпринял:
- Я сделал три сертификата PEM, сам подписал CA и определил базовое ограничение
crypto.X509Extension(b'basicConstraints', False, b'CA:TRUE')
после этого вопроса - Я скопировал CA и промежуточные сертификаты в
/usr/local/share/ca-certificates
(как файлы crt) и запустилsudo update-ca-cert
- Я установил простой сервер на основе этого примера OpenSSL
- Я попробовал запустить сервер с сертификатом CA и выполнил
openssl s_client -connect localhost:4433 -CApath /etc/ssl/certs
- отлично сработал, получилVerify return code: 0 (ok)
- Сделал то же самое, но на этот раз сервер использовал промежуточный сертификат - тоже отлично,
Verify return code: 0 (ok)
- Сделал то же самое, но на этот раз сервер использовал листовой сертификат - на этот раз я получил
Verify return code: 24 (invalid CA certificate)
Кроме того, я попытался проверить сертификаты и получил следующее:
$ openssl verify 1-ca.pem
1-ca.pem: OK
$ openssl verify 2-intermediate.pem
2-intermediate.pem: OK
$ openssl verify 3-leaf.pem
C = NL, ST = Amsterdam, L = Zaandam, O = FakeDigiCert, OU = FakeFake, CN = www.fakedigicert.nl
error 24 at 1 depth lookup: invalid CA certificate
error 3-leaf.pem: verification failed
Почему сертификат CA внезапно становится недействительным, когда сертификат сервера находится более чем в одном шаге от CA?