Як отримати файл .pem з файлів .key та .crt?


Відповіді:


799

Ваші ключі можуть бути вже у форматі 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.

Сервер.key, ймовірно, ваш приватний ключ, а .crt-файл - це повернений, підписаний сертифікат x509.

Якщо це для веб-сервера, ви не можете вказати завантаження окремого приватного та відкритого ключа:

Можливо, вам знадобиться об'єднати два файли. Для цього використовуйте:

cat server.crt server.key > server.includesprivatekey.pem

Я рекомендую назвати файли з "includeprivatekey", щоб допомогти вам керувати правами, які ви зберігаєте з цим файлом.


2
Перевірте формат server.key. Я лише припускав, що це RSA. Але прочитавши перший рядок файлу, напевно, це вам скаже.
maxwellb

10
Лише голова вгору, яка cat server.crt server.key > server.pemне розмістить відкритий коментар у власній лінії, що, здається, є обов'язковою умовою. Кур'єрська пошта дала мені пекло, і мені знадобилися години, щоб зрозуміти, що пішло не так.
Грем Уолтерс

1
Дякую, Грем. Різні інструменти генерують файли по-різному, і в кінцевому підсумку деяка перевірка хороша. Наприклад, коли я виконував ці дії, файли закінчувалися новим рядком, наприклад.
maxwellb

Порада про об'єднання файлів .crt та .key разом була дуже корисною. Я хотів використовувати свій сертифікат зі stunnel3, але у нього не було способу вказати файл ключа. Використання конкатенації спрацювало. (Насправді, оскільки stunnel3 - це програма Perl, я сам додав до неї варіант для читання ключового файлу. Однак, оскільки згодом я побачив, як конкатенація спрацювала, я повернув stunnel3 до його початкового коду.)
LS

2
Лише server.crt server.key > server.includesprivatekey.pemнарікання сказати, що кішка корисна для SSL з гапрокси 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, тому припускаючи, що він є, вам потрібна лише перша команда
Крістофер

Дивовижно! Це добре для мене працює! Просто перетворив мої файли .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
dimir

2
спостерігайте за пропущеними новинками у нашому файлі файлів, можливо, є такі рядки, як ----- END CERTIFICATE ---------- BEGIN CERTIFICATE -----
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 говорить ( визначення wiki ), що файл повинен починатися і закінчуватися BEGIN і END.

.pem - (Поліпшена конфіденційність пошти) Base64, закодований сертифікат DER, укладений між "----- НАЧАЙТЕ СЕРТИФІКАТ -----" та "----- КОНТРОЛЬНИЙ СЕРТИФІКАТ -----"

Так що для деяких бібліотек (я стикався з цим у Java), які очікують строгого формату pem, згенерований crt не зможе перевірити як "недійсний формат pem".

Навіть якщо ви скопіюєте або зкресліть рядки за допомогою 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

Якщо ви хочете отримати все від "BEGIN" до кінця файлу, це робота для sed. Зокрема, ви хочете чогось подібного sed -n '/--BEGIN/,$p' cert.crtв цьому випадку. Щоб пояснити це: "-n" повідомляє sed нічого не друкувати за замовчуванням, і тоді вираз діапазону /--BEGIN/,$змушує pкоманду (print) застосовувати до рядків між першим рядком, який містить, --BEGINі кінцем файлу ( $).
dannysauer

4

Я намагався перейти від godaddy до двигуна додатків. У чому полягає хитрість використання цього рядка:

openssl req -new -newkey rsa:2048 -nodes -keyout name.unencrypted.priv.key -out name.csr

Точно так, як є, але замінивши ім’я моїм доменним іменем (не те, щоб воно насправді навіть мало значення)

І я відповів на всі питання, що стосуються загальної назви / організації як www.name.com

Потім я відкрив csr, скопіював його, вставив у тато go, потім завантажив його, розпакував, перейшов до розпакованої папки з терміналом і ввів:

cat otherfilegodaddygivesyou.crt gd_bundle-g2-g1.crt > name.crt

Тоді я скористався цими інструкціями із програми " Проблеми" із користувацьким доменом SSL Google Apps , якими були:

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 для "Незашифрованого PEM, закодованого приватним ключем RSA".

.. І це нарешті спрацювало.


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. Відкрийте термінал і папку goto, де ви зберігаєте файл вище Certificate.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 -out YOUR_CERTIFICATE.pem -nodes -clcerts

  • Сподіваюся, це спрацює !!
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.