Как я могу создать файл PEM из сертификата SSL?
Это файлы, которые у меня есть:
.crt
server.csr
server.key
Как я могу создать файл PEM из сертификата SSL?
Это файлы, которые у меня есть:
.crt
server.csr
server.key
Ответы:
Ваши ключи уже могут быть в формате PEM, но просто названы с помощью .crt или .key.
Если содержимое файла начинается с, -----BEGIN
и вы можете прочитать его в текстовом редакторе:
Файл использует base64, который читается в ASCII, а не в двоичном формате. Сертификат уже в формате PEM. Просто измените расширение на .pem.
Если файл в двоичном формате:
Для server.crt вы бы использовали
openssl x509 -inform DER -outform PEM -in server.crt -out server.crt.pem
Для server.key используйте openssl rsa
вместо openssl x509
.
Возможно, server.key - это ваш закрытый ключ, а файл .crt - это возвращенный подписанный сертификат x509.
Если это для веб-сервера, и вы не можете указать загрузку отдельного частного и открытого ключа:
Вам может понадобиться объединить два файла. Для этого используйте:
cat server.crt server.key > server.includesprivatekey.pem
Я бы порекомендовал именовать файлы с помощью «includesprivatekey», чтобы помочь вам управлять разрешениями, которые вы храните в этом файле.
cat server.crt server.key > server.pem
который не будет размещать открытый комментарий в своей строке, что кажется обязательным требованием. Курьерская почта доставила мне ад, и мне потребовались часы, чтобы понять, что происходит не так.
server.crt server.key > server.includesprivatekey.pem
полезен для SSL с haproxy 1.5.
Мне нужно было сделать это для AWS ELB. После многократного избиения диалогом, вот что у меня получилось:
openssl rsa -in server.key -text > private.pem
openssl x509 -inform PEM -in server.crt > public.pem
Спасибо NCZ
Редактировать: как говорит @floatingrock
С AWS не забудьте добавить имя файла с помощью file://
. Так это будет выглядеть так:
aws iam upload-server-certificate --server-certificate-name blah --certificate-body file://path/to/server.crt --private-key file://path/to/private.key --path /cloudfront/static/
http://docs.aws.amazon.com/cli/latest/reference/iam/upload-server-certificate.html
file://
. Так это будет выглядеть так:aws iam upload-server-certificate --server-certificate-name blah --certificate-body file://~/Desktop/server.crt --private-key file://~/Desktop/private.key --path /cloudfront/static/
pem
Файл содержит сертификат и закрытый ключ. Это зависит от формата вашего сертификата / ключа, но, вероятно, это так просто:
cat server.crt server.key > server.pem
-bash: server.key.pem: Permission denied
Кроме того, если вы не хотите, чтобы он запрашивал фразу-пароль, необходимо выполнить следующую команду:
openssl rsa -in server.key -out server.key
-----BEGIN RSA PRIVATE KEY-----
и у вас есть файл, начинающийся с -----BEGIN ENCRYPTED PRIVATE KEY-----
, это команда, которую вы хотите использовать.
Я заметил следующее: если вы используете openssl для генерации сертификатов, он захватывает как текстовую часть, так и часть сертификата base64 в файле crt. Строгий формат pem говорит ( определение вики ), что файл должен начинаться и заканчиваться BEGIN и END.
.pem - (Privacy Enhanced Mail) сертификат DER в кодировке Base64, заключенный между "----- BEGIN CERTIFICATE -----" и "----- END CERTIFICATE -----"
Таким образом, для некоторых библиотек (я сталкивался с этим в Java), которые ожидают строгого формата pem, сгенерированный crt не пройдет проверку как «неверный формат pem».
Даже если вы копируете или выполняете grep строки с помощью BEGIN / END CERTIFICATE и вставляете их в файл cert.pem, это должно работать.
Вот что я делаю, не очень чисто, но у меня работает, в основном фильтрует текст, начиная со строки BEGIN:
grep -A 1000 BEGIN cert.crt> cert.pem
openssl x509
. Он выдаст действительный сертификат PEM: cat certificate.crt | openssl x509 > certificate.pem
sed -n '/--BEGIN/,$p' cert.crt
в этом случае. Чтобы объяснить это: «-n» говорит sed не печатать ничего по умолчанию, а затем выражение диапазона /--BEGIN/,$
применяет p
команду (print) к строкам между первой строкой, которая содержит, --BEGIN
и концом file ( $
).
Я пытался перейти от Godaddy к App Engine. Что сделал трюк, используя эту строку:
openssl req -new -newkey rsa:2048 -nodes -keyout name.unencrypted.priv.key -out name.csr
Точно так же, как есть, но замена имени на мое доменное имя (не то, чтобы оно действительно даже имело значение)
И я ответил на все вопросы, касающиеся общего названия / организации, как www.name.com
Затем я открыл csr, скопировал его, вставил его в go daddy, затем загрузил его, разархивировал, перешел в разархивированную папку с терминалом и ввел:
cat otherfilegodaddygivesyou.crt gd_bundle-g2-g1.crt > name.crt
Затем я использовал следующие инструкции по устранению неполадок с SSL для пользовательского домена Служб Google :
openssl rsa -in privateKey.key -text > private.pem
openssl x509 -inform PEM -in www_mydomain_com.crt > public.pem
в точности как есть, за исключением того, что вместо privateKey.key я использовал name.unencrypted.priv.key, а вместо www_mydomain_com.crt я использовал name.crt
Затем я загрузил public.pem в консоль администратора для «сертификата X.509 в кодировке PEM» и загрузил private.pem для «секретного ключа RSA в кодировке PEM в незашифрованном виде».
.. И это, наконец, сработало.
Пытаясь загрузить сертификат GoDaddy в AWS, я несколько раз терпел неудачу, но в итоге все оказалось довольно просто. Не нужно ничего конвертировать в .pem. Нужно просто включить сертификат пакета GoDaddy в параметр цепочки, например
aws iam upload-server-certificate
--server-certificate-name mycert
--certificate-body file://try2/40271b1b25236fd1.crt
--private-key file://server.key
--path /cloudfront/production/
--certificate-chain file://try2/gdig2_bundle.crt
И чтобы удалить предыдущую неудачную загрузку вы можете сделать
aws iam delete-server-certificate --server-certificate-name mypreviouscert
An error occurred (MalformedCertificate) when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.
Запустите следующие команды:
а) openssl pkcs12 -in Certificates.p12 -out CertificateName.pem -nodes
,
б) openssl pkcs12 -in Certificates.p12 -out pushcert.pem -nodes -clcerts
openssl pkcs12 - в YOUR_CERTIFICATE.p12 - в YOUR_CERTIFICATE.pem -nodes -clcerts
.pem
в.crt
и.key
.