Как получить файл .pem из файлов .key и .crt? - PullRequest
532 голосов
/ 14 июня 2009

Как я могу создать PEM-файл из SSL-сертификата?

Это файлы, которые у меня есть:

  • .crt
  • server.csr
  • server.key

Ответы [ 10 ]

704 голосов
/ 14 июня 2009

Ваши ключи уже могут быть в формате 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", чтобы помочь вам управлять разрешениями, которые вы храните в этом файле.

205 голосов
/ 30 августа 2012

Мне нужно было сделать это для 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

76 голосов
/ 14 июня 2009
Файл

A pem содержит сертификат и закрытый ключ. Это зависит от формата вашего сертификата / ключа, но, вероятно, это так просто:

cat server.crt server.key > server.pem
21 голосов
/ 21 октября 2010

Кроме того, если вы не хотите, чтобы он запрашивал ключевую фразу, необходимо выполнить следующую команду:

openssl rsa -in server.key -out server.key
15 голосов
/ 24 мая 2014

это лучший вариант для создания .pem файла

openssl pkcs12 -in MyPushApp.p12 -out MyPushApp.pem -nodes -clcerts
3 голосов
/ 07 июня 2016

Попытка загрузить сертификат 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
3 голосов
/ 09 августа 2015

Я пытался перейти от Godaddy к движку приложения. Что сделал трюк, используя эту строку:

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

Затем я использовал эти инструкции из Проблемы с пользовательским доменом Google Apps SSL , которые были:

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 в консоль администратора для «сертификата PEM в кодировке X.509» и загрузил private.pem для «незашифрованного закрытого ключа RSA в PEM» ..

.. И это наконец сработало.

3 голосов
/ 24 апреля 2014
  1. Скачать сертификат с временного портала по appleId,
  2. Экспортировать сертификат из цепочки для ключей и дать имя (Certificates.p12),
  3. Откройте терминал и перейдите в папку, в которую вы сохраняете файл Certificates.p12,
  4. Запустите следующие команды:

    а) openssl pkcs12 -in Certificates.p12 -out CertificateName.pem -nodes,

    б) openssl pkcs12 -in Certificates.p12 -out pushcert.pem -nodes -clcerts

  5. Ваш файл .pem готов "pushcert.pem".
3 голосов
/ 14 февраля 2013

Я заметил следующее: если вы используете openssl для генерации сертификатов, он захватывает как текстовую часть, так и часть сертификата base64 в файле crt. Строгий формат pem говорит ( определение вики ), что файл должен начинаться и заканчиваться BEGIN и END.

.pem - (DER Enhanced Mail) сертификат DER в кодировке Base64, заключенный между "----- НАЧАТЬ СЕРТИФИКАТ -----" и "----- КОНЕЦ СЕРТИФИКАТ ----- "

Так что для некоторых библиотек (с которыми я столкнулся в java), которые ожидают строгого формата pem, сгенерированный crt не пройдет проверку как «неверный формат pem».

Даже если вы скопируете или отобразите строки с помощью BEGIN / END CERTIFICATE и вставите их в файл cert.pem, это должно сработать.

Вот что я делаю, не очень чисто, но у меня работает, в основном фильтрует текст, начиная со строки BEGIN:

grep -A 1000 BEGIN cert.crt> cert.pem

0 голосов
/ 27 июля 2017
  • Открыть терминал.
  • Перейдите в папку, где находится ваш сертификат.
  • Выполните приведенную ниже команду, заменив имя своим сертификатом.

openssl pkcs12 -в YOUR_CERTIFICATE.p12 -вне YOUR_CERTIFICATE.pem -nodes -clcerts

  • Надеюсь, это сработает !!
...