Bagaimana cara mendapatkan file .pem dari file .key dan .crt?

601

Bagaimana saya bisa membuat file PEM dari sertifikat SSL?

Ini adalah file yang saya miliki:

  • .crt
  • server.csr
  • server.key
Sergio Rodriguez
sumber
2
Cara sebaliknya: Konversi .pemke .crtdan.key .
kenorb

Jawaban:

801

Kunci Anda mungkin sudah dalam format PEM, tetapi baru dinamai dengan .crt atau .key.

Jika konten file dimulai dengan -----BEGINdan Anda dapat membacanya di editor teks:

File menggunakan base64, yang dapat dibaca dalam ASCII, bukan format biner. Sertifikat sudah dalam format PEM. Cukup ubah ekstensi menjadi .pem.

Jika file tersebut dalam biner:

Untuk server.crt, Anda akan menggunakan

openssl x509 -inform DER -outform PEM -in server.crt -out server.crt.pem

Untuk server.key, gunakan openssl rsadi tempat openssl x509.

Server.key kemungkinan merupakan kunci pribadi Anda, dan file .crt adalah sertifikat x509 yang dikembalikan, ditandatangani, dan ditandatangani.

Jika ini untuk server Web dan Anda tidak dapat menentukan pemuatan kunci privat dan publik yang terpisah:

Anda mungkin perlu menggabungkan dua file. Untuk penggunaan ini:

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

Saya akan merekomendasikan penamaan file dengan "includeprivatekey" untuk membantu Anda mengelola izin yang Anda simpan dengan file ini.

Maxwellb
sumber
2
Periksa format server.key. Saya hanya berasumsi itu RSA. Tetapi membaca baris pertama file mungkin akan memberi tahu Anda hal itu.
Maxwellb
10
Hanya kepala di atas yang cat server.crt server.key > server.pemtidak akan menempatkan komentar terbuka pada barisnya sendiri, yang tampaknya menjadi persyaratan. Surat kurir memberi saya neraka dan butuh berjam-jam untuk mencari tahu apa yang salah.
Graham Walters
1
Terimakasih Graham. Alat yang berbeda akan menghasilkan file secara berbeda, dan pada akhirnya, beberapa verifikasi baik. Ketika saya melakukan langkah-langkah ini, file berakhir dengan baris baru, misalnya.
maxwellb
Kiat tentang menggabungkan file .crt dan .key bersama-sama sangat membantu. Saya ingin menggunakan sertifikat saya dengan stunnel3, tetapi tidak memiliki cara untuk menentukan file kunci. Menggunakan penggabungan berhasil. (Sebenarnya, karena stunnel3 adalah program Perl, saya menambahkan opsi untuk itu sendiri untuk membaca file kunci. Namun, karena saya kemudian melihat penggabungan bekerja, saya telah mengembalikan stunnel3 ke kode aslinya.)
LS
2
Hanya sedikit yang mengatakan bahwa kucing server.crt server.key > server.includesprivatekey.pemberguna untuk SSL dengan haproxy 1.5.
jimm101
224

Saya perlu melakukan ini untuk AWS ELB. Setelah dipukuli oleh dialog berkali-kali, akhirnya ini yang berhasil bagi saya:

openssl rsa -in server.key -text > private.pem
openssl x509 -inform PEM -in server.crt > public.pem

Terima kasih NCZ

Sunting: Seperti yang dikatakan @floatingrock

Dengan AWS, jangan lupa untuk mengawali nama file dengan file://. Jadi akan terlihat seperti:

 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

slf
sumber
19
Dengan AWS, jangan lupa untuk mengawali nama file dengan file://. Jadi akan terlihat seperti: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
Perintah kedua tidak melakukan apa-apa jika input Anda adalah file pem jadi dengan asumsi itu, Anda hanya perlu perintah pertama
Kristofer
Luar biasa! Ini bekerja dengan baik untuk saya! Baru saja mengonversi file .key dan .crt saya menjadi .pem menggunakan baris kode Anda dan kemudian saya mengunggah (salin / tempel) melalui konsol AWS. Terima kasih!
Diego D
79

Sebuah pemfile berisi sertifikat dan kunci pribadi. Tergantung pada format sertifikat / kunci Anda, tetapi mungkin sesederhana ini:

cat server.crt server.key > server.pem
sth
sumber
saya terus mendapatkan-bash: server.key.pem: Permission denied
tq
2
@ tq: Itu berarti Anda tidak diperbolehkan membaca atau menulis file itu.
sth
terima kasih @sth akan mencari izin. tetapi saya melakukan ini dengan perintah sudo
tq
8
@tq: cat server.crt server.key | sudo tee server.pem
dimir
2
Watchout for newlines yang hilang file pem Anda kami mungkin memiliki garis kacau seperti ----- AKHIR SERTIFIKAT ---------- MULAI SERTIFIKAT -----
Wolfgang Fahl
24

Selain itu, jika Anda tidak ingin meminta passphrase, maka perlu menjalankan perintah berikut:

openssl rsa -in server.key -out server.key
rahul
sumber
9
Jika Anda ingin file dimulai dengan -----BEGIN RSA PRIVATE KEY-----dan memiliki yang dimulai -----BEGIN ENCRYPTED PRIVATE KEY-----, ini adalah perintah yang ingin Anda gunakan.
Philippe Gerber
18

ini adalah opsi terbaik untuk membuat file .pem

openssl pkcs12 -in MyPushApp.p12 -out MyPushApp.pem -nodes -clcerts
GOrozco58
sumber
4

Apa yang saya amati adalah: jika Anda menggunakan openssl untuk menghasilkan sertifikat, ia menangkap bagian teks dan bagian sertifikat base64 dalam file crt. Format pem ketat mengatakan ( definisi wiki ) bahwa file harus mulai dan diakhiri dengan BEGIN dan END.

.pem - (Privacy Enhanced Mail) Base64 menyandikan sertifikat DER, terlampir di antara "----- BEGIN CERTIFICATE -----" dan "----- END CERTIFICATE -----"

Jadi untuk beberapa perpustakaan (saya temui ini di java) yang mengharapkan format pem yang ketat, crt yang dihasilkan akan gagal validasi sebagai 'format pem yang tidak valid'.

Bahkan jika Anda menyalin atau menerima baris dengan BEGIN / END CERTIFICATE, dan menempelkannya dalam file cert.pem, itu harus bekerja.

Inilah yang saya lakukan, tidak terlalu bersih, tetapi berfungsi untuk saya, pada dasarnya ini memfilter teks mulai dari baris BEGIN:

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

adityalad
sumber
1
Pilihan lain adalah dengan meloloskan sertifikat non-ketat openssl x509. Ini akan menampilkan sertifikat PEM yang valid: cat certificate.crt | openssl x509 > certificate.pem
T0xicCode
Jika Anda ingin mendapatkan semuanya dari "BEGIN" hingga akhir file, itu adalah pekerjaan untuk sed. Khususnya, Anda menginginkan sesuatu seperti sed -n '/--BEGIN/,$p' cert.crtdalam kasus ini. Untuk menjelaskan bahwa: "-n" memberitahu sed untuk tidak mencetak apa pun secara default, dan kemudian ekspresi range /--BEGIN/,$membuat pperintah (print) berlaku untuk baris antara baris pertama yang berisi --BEGINdan akhir file ( $).
dannysauer
4

Saya mencoba untuk beralih dari GoDaddy ke mesin aplikasi. Apa triknya menggunakan baris ini:

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

Persis seperti apa adanya, tetapi mengganti nama dengan nama domain saya (bukan berarti itu benar-benar penting)

Dan saya menjawab semua pertanyaan yang berkaitan dengan nama umum / organisasi sebagai www.name.com

Lalu saya membuka csr, menyalinnya, menempelkannya di go daddy, lalu mengunduhnya, membuka ritsletingnya, menavigasi ke folder yang tidak di-zip dengan terminal dan memasukkan:

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

Kemudian saya menggunakan instruksi ini dari Trouble with Google Apps Custom Domain SSL , yaitu:

openssl rsa -in privateKey.key -text > private.pem
openssl x509 -inform PEM -in www_mydomain_com.crt > public.pem

persis apa adanya, kecuali alih-alih privateKey.key saya menggunakan name.unencrypted.priv.key, dan alih-alih www_mydomain_com.crt, saya menggunakan name.crt

Kemudian saya mengunggah public.pem ke admin admin untuk "PEM encode sertifikat X.509", dan mengunggah private.pem untuk "PEM yang tidak dienkripsi mengenkripsi kunci pribadi RSA yang disandikan" ..

.. Dan akhirnya berhasil.

Komunitas
sumber
4

Mencoba mengunggah sertifikat GoDaddy ke AWS saya gagal beberapa kali, tetapi pada akhirnya itu sangat sederhana. Tidak perlu mengonversi apa pun menjadi .pem. Anda hanya perlu memastikan untuk menyertakan sertifikat bundel GoDaddy dalam parameter rantai, misalnya

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

Dan untuk menghapus unggahan gagal sebelumnya Anda bisa Anda lakukan

aws iam delete-server-certificate --server-certificate-name mypreviouscert
Skensell
sumber
Ini tidak berhasil untuk sayaAn error occurred (MalformedCertificate) when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.
Adam Raudonis
4
  1. Unduh sertifikat dari portal sementara oleh appleID,
  2. Ekspor sertifikat dari gantungan kunci dan beri nama (Certificates.p12),
  3. Buka terminal dan folder goto tempat Anda menyimpan file Certificates.p12 di atas,
  4. Jalankan perintah di bawah ini:

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

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

  5. File .pem Anda siap "pushcert.pem".
Ashvin Ajadiya
sumber
0
  • Terminal terbuka.
  • Buka folder tempat sertifikat Anda berada.
  • Jalankan perintah di bawah ini dengan mengganti nama dengan sertifikat Anda.

openssl pkcs12 -dalam YOUR_CERTIFICATE.p12 -keluar dari YOUR_CERTIFICATE.pem -nodes -clcerts

  • Semoga berhasil !!
Dhaval H. Nena
sumber