Как получить файл .pem из файлов .key и .crt?


Ответы:


801

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


2
Проверьте формат server.key. Я только предполагал, что это был RSA. Но чтение первой строки файла, вероятно, скажет вам об этом.
— maxwellb

10
Просто заголовок, cat server.crt server.key > server.pemкоторый не будет размещать открытый комментарий в своей строке, что кажется обязательным требованием. Курьерская почта доставила мне ад, и мне потребовались часы, чтобы понять, что происходит не так.
— Грэм Уолтерс

1
Спасибо, Грэм. Различные инструменты будут генерировать файлы по-разному, и, в конечном счете, некоторая проверка хороша. Когда я выполнял эти шаги, файлы заканчивались символом новой строки, например.
— maxwellb

Совет по объединению файлов .crt и .key вместе был очень полезен. Я хотел использовать свой сертификат с stunnel3, но у него не было способа указать файл ключа. Использование конкатенации сработало. (На самом деле, поскольку stunnel3 - это программа на Perl, я сам добавил к ней опцию для чтения файла ключа. Однако, поскольку позже я увидел, что конкатенация сработала, я вернул stunnel3 к его исходному коду.)
— LS

2
Просто скажу, что cat server.crt server.key > server.includesprivatekey.pemполезен для SSL с haproxy 1.5.
— jimm101

224

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


19
С AWS не забудьте добавить имя файла с помощью 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/
— FloatingRock

1
Вторая команда ничего не делает, если ваш ввод является файлом pem, поэтому при условии, что это так, вам нужна только первая команда
— Kristofer

Потрясающие! Это хорошо сработало для меня! Просто преобразовал мои .key и .crt файлы в .pem, используя ваши строки кода, а затем я загрузил (копировал / вставил) через консоль AWS. Спасибо!
— Диего Д

79

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

cat server.crt server.key > server.pem

я продолжаю получать-bash: server.key.pem: Permission denied
— tq

2
@tq: Это означает, что вам запрещено читать или писать этот файл.
— STH

спасибо @sth поищу разрешение. но я делал это с помощью команд sudo
— tq

8
@tq: cat server.crt server.key | sudo tee server.pem
— Димир

2
следите за пропущенными символами новой строки, в нашем файле pem могут быть искаженные строки, например ----- КОНЕЦ СЕРТИФИКАТА ---------- НАЧАТЬ СЕРТИФИКАТ -----
— Wolfgang Fahl

24

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

openssl rsa -in server.key -out server.key

9
Если вы хотите, чтобы файл начинался с, -----BEGIN RSA PRIVATE KEY-----и у вас есть файл, начинающийся с -----BEGIN ENCRYPTED PRIVATE KEY-----, это команда, которую вы хотите использовать.
— Филипп Гербер

18

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

openssl pkcs12 -in MyPushApp.p12 -out MyPushApp.pem -nodes -clcerts

4

Я заметил следующее: если вы используете 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


1
Другой вариант - просто пропустить не строгий сертификат openssl x509. Он выдаст действительный сертификат PEM: cat certificate.crt | openssl x509 > certificate.pem
— T0xicCode

Если вы хотите получить все от «НАЧАЛА» до конца файла, это работа для sed. В частности, вы хотите что-то подобное sed -n '/--BEGIN/,$p' cert.crtв этом случае. Чтобы объяснить это: «-n» говорит sed не печатать ничего по умолчанию, а затем выражение диапазона /--BEGIN/,$применяет pкоманду (print) к строкам между первой строкой, которая содержит, --BEGINи концом file ( $).
— dannysauer

4

Я пытался перейти от 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 в незашифрованном виде».

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


4

Пытаясь загрузить сертификат 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.
— Адам Раудонис

4
  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".

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

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

  • Надеюсь, это сработает!
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.