Сообщение об ошибке
verify error:num=79:invalid CA certificate
Также выводится как
- error 79 at 1 depth lookup: invalid CA certificate
И OpenSSL 3.0.13, и 3.5.7 выдают в этом случае ошибку 79 (в старых справочниках «invalid CA certificate» значится как ошибка 24; она по-прежнему существует для других проверок CA). Для того же сертификата s_client выводит ещё и ошибку 26, «unsuitable certificate purpose», и в итоговой строке показывает именно этот последний код.
OpenSSL 3.x CLI (openssl s_client / openssl verify) — X509_V_ERR_INVALID_CA
Что это означает
Ошибка OpenSSL 79 (X509_V_ERR_INVALID_CA): сертификат, который стоит в цепочке на месте издателя, не годится в качестве сертификата CA — в его basicConstraints указано CA:FALSE или этого расширения нет вовсе, либо его keyUsage не разрешает подписывать сертификаты. Глубина в сообщении openssl verify указывает на проблемный сертификат (1 — первый промежуточный).
Почему это происходит
Издатель — сертификат конечного субъекта
частоСертификаты, подписанные ключом серверного или клиентского сертификата; так обычно бывает в самодельных скриптах PKI.
В сертификате CA нет keyCertSign
иногдаПромежуточный сертификат, в keyUsage которого нет keyCertSign, нельзя использовать как издателя даже при CA:TRUE.
Превышено ограничение длины пути
редкоПромежуточный сертификат, который стоит ниже CA с pathlen:0, не принимается как издатель; перестройте иерархию или перевыпустите сертификат с подходящим значением pathlen.
Как исправить
- 1.
Проверьте сертификат на указанной глубине
basicConstraints должно иметь значение CA:TRUE (critical), а keyUsage — включать keyCertSign.
bash # The certificate at the depth named in the error must be a CA openssl x509 -in int.pem -noout -subject -ext basicConstraints,keyUsage - 2.
Перевыпустите промежуточный сертификат как сертификат CA
Подпишите его заново с расширениями CA; выпущенные им сертификаты останутся действительными, если ключ и субъект не изменятся.
bash printf 'basicConstraints=critical,CA:TRUE,pathlen:0\nkeyUsage=critical,keyCertSign,cRLSign\n' > ca.ext openssl x509 -req -in int.csr -CA root.pem -CAkey root.key -days 1825 -extfile ca.ext -out int.pem
Связанные ошибки
x509: invalid signature: parent certificate cannot sign this kind of certificateGo crypto/x509verify error:num=26:unsuitable certificate purposeOpenSSL CLI (openssl s_client / openssl verify -purpose)verify error:num=20:unable to get local issuer certificateOpenSSL CLI (openssl s_client / openssl verify)