OpenSSL конвертировать PEM в PFX с помощью ключа RSA PRIVATE

4046
thxmike

Я пытаюсь использовать OpenSSL для преобразования файла PEM и закрытого ключа RSA в файл PFX. Вот пример команды, которую я пытался использовать:

openssl pkcs12 -export -out cert.pfx -inkey key.pem -in cert.pem 

При этом я получаю следующее сообщение об ошибке:

unable to load private key 9068:error:0906D06C:PEM routines:PEM_read_bio:no start  line:pem_lib.c:696:Expecting: ANY PRIVATE KEY 

Файл сертификата выглядит так:

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

и закрытый ключ выглядит так:

-----BEGIN RSA PRIVATE KEY----- .... -----END RSA PRIVATE KEY----- 

Я покопался в ошибке, но пока не нашел решения.

РЕДАКТИРОВАТЬ

После некоторых дополнительных исследований возникла проблема с различными версиями openssl.

Если я запускаю его в моей системе OSX, которая работает 0.9.8zh 14 января 2016 года, эти заявления работают нормально.

Однако, если я запускаю его на Windows-машине с версией OpenSSL 1.0.1p 9 июля 2015 года и OpenSSL 1.1.0g 2 ноября 2017 года, я получаю вышеуказанные ошибки.

1
Работает для меня! Есть ли OpenSSL RSA-в-noout -text` показать детали ключа или ошибку? Может быть, файл закрытого ключа поврежден? Если это работает, преобразуйте его в закрытый ключ PKCS # 8 с помощью `openssl pkcs8 -in -topk8 -nocrypt -out `и попытайтесь с этим сгенерировать PKCS # 12. garethTheRed 6 лет назад 0
@garethTheRed: Спасибо. Эта дополнительная информация была очень полезной, и она привела меня вглубь проблемы. thxmike 6 лет назад 0

1 ответ на вопрос

0
thxmike

После нескольких копаний я обнаружил, что именно скрипты Powershell генерируют файлы ключей и сертификатов.

Используя Notepad ++ в Windows и Tex-Edit Plus в OSX для определения скрытых символов, я обнаружил, что в конце файла были дополнительные [cr].

Используя команду

openssl rsa -in <private key file> -noout -text openssl x509 -in <cert file> -noout -text 

Хороши ли проверки на достоверность файлов?

Так как моим источником были строки в кодировке base64, я использовал команду certutil в Windows (т.е.)

certutil -f -decode cert.enc cert.pem certutil -f -decode key.enc cert.key 

на окнах для генерации файлов. Как только файлы были правильными, команда OpenSSL выше работала как ожидалось.