Сообщение об ошибке
unable to load certificate
Формулировка OpenSSL 1.1.x. OpenSSL 3.0 выводит «Could not read certificate from cert.pem», а за ним «Unable to load certificate» с заглавной U; OpenSSL 3.5 и новее выводят «Could not find certificate from cert.pem» и строку стека STORE routines (воспроизведено на 3.0.2 и 3.6.4). Формулировка зависит от версии, ошибка одна и та же.
Что это означает
openssl x509 (или другая команда, принимающая сертификаты) не смогла извлечь сертификат из файла. Во входных данных другой объект PEM (ключ, CSR), не та двоичная кодировка или текст, в котором вообще нет структуры X.509: до чтения полей команда так и не дошла. Файлы сертификатов называют .crt или .cer независимо от кодировки, поэтому имя файла здесь ничего не говорит; говорят только байты.
Почему это происходит
В файле ключ или CSR, а не сертификат
частоБлоки BEGIN PRIVATE KEY, BEGIN PUBLIC KEY или BEGIN CERTIFICATE REQUEST — не сертификаты. CSR особенно часто принимают за сертификат: CSR вы отправляете в CA, а сертификат — это то, что приходит в ответ.
Сертификат DER без -inform der
частоФайлы .cer/.crt из экосистемы Windows часто содержат двоичный DER. openssl x509 в OpenSSL 1.1 по умолчанию ожидает PEM и не находит PEM-обрамления; OpenSSL 3 распознаёт DER сам.
Пакет PKCS#7 / PKCS#12
иногдаФайлы .p7b и .pfx/.p12 — это контейнеры с сертификатами, а не сами сертификаты. Чтобы команда x509 смогла прочитать содержимое, их сначала нужно распаковать отдельными командами.
Как исправить
- 1.
Определите формат, затем преобразуйте
Посмотрите на метку или первые байты; при необходимости преобразуйте DER в PEM.
bash head -1 cert.file # BEGIN what? openssl x509 -inform der -in cert.der -out cert.pem # DER → PEM - 2.
Распакуйте контейнерные форматы
Извлеките сертификаты из пакетов PKCS#7 и PKCS#12 в обычный PEM.
bash openssl pkcs7 -print_certs -in bundle.p7b -out certs.pem openssl pkcs12 -in bundle.pfx -clcerts -nokeys -out cert.pem - 3.
Для CSR используйте команду req
Если в файле запрос, разберите его командой req и помните: чтобы стать сертификатом, его ещё должен подписать CA.
bash openssl req -in request.csr -noout -text