Назад | Перейти на главную страницу

Openssl: сгенерированный сертификат и ключ из pfx не совпадают

Я пытаюсь преобразовать pfx к cer и key формат, чтобы использовать их с Nginx.

Я использую следующие команды:

openssl pkcs12 -in input.pfx -out mycerts.cer -nokeys -clcerts

и

openssl pkcs12 -in input.pfx -out mycerts.key -nocerts -nodes

Проблема в том, что cer и key файлы не совпадают!

openssl x509 -modulus -noout -in mycerts.crt | openssl md5

и

openssl rsa -modulus -noout -in mycerts.key | openssl md5

С прочими pix файлы процедура работает должным образом. Как я могу получить действующий набор сертификатов для использования с nginx?

Когда я создаю новый файл pfx и запускаю те же команды, я получаю корректный результат для вашего теста.

Шаги, которые я предпринял для воспроизведения:

# generate new x509 key/cert pair
openssl req -x509 -newkey rsa:4096 -keyout cert.key -out cert.pem -days 365

# validate key and cert
openssl rsa-modulus -noout -in cert.key | openssl md5
openssl x509 -modulus -noout -in cert.pem | openssl md5

# export key/cert pair to pkcs12
openssl pkcs12 -export -out cert.pfx -in cert.pem -inkey cert.key

# extract key and cert from pkcs12 file
openssl pkcs12 -in cert.pfx -out export.crt -nokeys -clcerts
openssl pkcs12 -in cert.pfx -out export.key -nocerts -nodes

# validate exported key and cert
openssl rsa -modulus -noout -in export.key | openssl md5
openssl x509 -modulus -noout -in export.pem | openssl md5

Таким образом, ваш входной файл PKCS12 должен быть создан ошибочно. Обратитесь к источнику, если файл PKCS12 неисправен, или если вы создали его сами, если файл был сгенерирован правильно.

PKCS12 может представлять собой сложную структуру ключей, сертификатов и промежуточного сертификата. Я не думаю, что файловая структура запрещает хранить сертификат и ключ, которые не совпадают, хотя OpenSSL запрещает это при экспорте:

$ openssl pkcs12 -export -out cert.pfx -in cert.pem -inkey other.key
No certificate matches private key