Apa itu file Pem dan apa bedanya dengan OpenSSL Generated Key File Format lainnya?

1344

Saya bertanggung jawab untuk memelihara dua server Debian. Setiap kali saya harus melakukan apa pun dengan sertifikat keamanan, saya mencari tutorial di Google dan mengalahkannya sampai akhirnya berhasil.

Namun, dalam pencarian saya, saya sering menemukan format file yang berbeda ( .key, .csr, .pem) tapi aku tidak pernah bisa menemukan penjelasan yang baik dari apa tujuan masing-masing format file adalah.

Saya bertanya-tanya apakah orang-orang baik di ServerFault dapat memberikan klarifikasi tentang masalah ini?

Noah Goodrich
sumber

Jawaban:

1656

SSL sudah ada cukup lama, Anda akan berpikir bahwa akan ada format wadah yang disepakati. Dan Anda benar, ada. Terlalu banyak standar yang terjadi. Jadi ini yang saya tahu, dan saya yakin orang lain akan ikut.

  • .csr - Ini adalah Permintaan Penandatanganan Sertifikat. Beberapa aplikasi dapat menghasilkan ini untuk diajukan ke otoritas sertifikat. Format sebenarnya adalah PKCS10 yang didefinisikan dalam RFC 2986 . Ini mencakup beberapa / semua detail utama dari sertifikat yang diminta seperti subjek, organisasi, negara bagian, yang lainnya, serta kunci publik dari sertifikat untuk ditandatangani. Ini bisa ditandatangani oleh CA dan sertifikat dikembalikan. Sertifikat kembali adalah publik sertifikat (yang meliputi kunci publik tetapi tidak kunci pribadi), yang dengan sendirinya dapat dalam beberapa format.
  • .pem - Didefinisikan dalam RFC 1421 hingga 1424 , ini adalah format kontainer yang mungkin hanya menyertakan sertifikat publik (seperti dengan pemasangan Apache, dan file sertifikat CA /etc/ssl/certs), atau dapat mencakup seluruh rantai sertifikat termasuk kunci publik, kunci pribadi, dan sertifikat root. Yang membingungkan, itu juga dapat menyandikan CSR (misalnya seperti yang digunakan di sini ) karena format PKCS10 dapat diterjemahkan ke dalam PEM. Namanya dari Privacy Enhanced Mail (PEM) , metode gagal untuk email aman tetapi format wadah yang digunakannya tetap hidup, dan merupakan terjemahan base64 dari kunci x509 ASN.1.
  • .key - Ini adalah file berformat PEM yang hanya berisi kunci privat dari sertifikat tertentu dan hanya nama konvensional dan bukan yang terstandarisasi. Di instalasi Apache, ini sering berada di /etc/ssl/private. Hak atas file-file ini sangat penting, dan beberapa program akan menolak untuk memuat sertifikat ini jika itu salah.
  • .pkcs12 .pfx .p12 - Awalnya didefinisikan oleh RSA dalam Public-Key Cryptography Standards (disingkat PKCS), varian "12" pada awalnya ditingkatkan oleh Microsoft, dan kemudian diajukan sebagai RFC 7292 . Ini adalah format wadah dengan kata sandi yang berisi pasangan sertifikat publik dan pribadi. Tidak seperti file .pem, wadah ini sepenuhnya dienkripsi. Openssl dapat mengubahnya menjadi file .pem dengan kunci publik dan pribadi:openssl pkcs12 -in file-to-convert.p12 -out converted-file.pem -nodes

Beberapa format lain yang muncul dari waktu ke waktu:

  • .der - Cara untuk menyandikan sintaks ASN.1 dalam biner, file .pem hanyalah file .der yang disandikan Base64. OpenSSL dapat mengonversinya menjadi .pem ( openssl x509 -inform der -in to-convert.der -out converted.pem). Windows melihatnya sebagai file Sertifikat. Secara default, Windows akan mengekspor sertifikat sebagai file berformat .DER dengan ekstensi berbeda. Suka...
  • .cert .cer .crt - File berformat .pem (atau jarang .der) dengan ekstensi berbeda, yang diakui oleh Windows Explorer sebagai sertifikat, yang .pem tidak.
  • .p7b .keystore - Didefinisikan dalam RFC 2315 sebagai PKCS nomor 7, ini adalah format yang digunakan oleh Windows untuk pertukaran sertifikat. Java memahami ini secara asli, dan sering menggunakan .keystoreekstensi sebagai gantinya. Tidak seperti sertifikat gaya .pem, format ini memiliki cara yang pasti untuk menyertakan sertifikat jalur sertifikasi.
  • .crl - Daftar pencabutan sertifikat. Otoritas Sertifikat menghasilkan ini sebagai cara untuk membatalkan otorisasi sertifikat sebelum kedaluwarsa. Anda terkadang dapat mengunduhnya dari situs web CA.

Singkatnya, ada empat cara berbeda untuk menyajikan sertifikat dan komponennya:

  • PEM - Diatur oleh RFC, digunakan secara istimewa oleh perangkat lunak sumber terbuka. Itu dapat memiliki berbagai ekstensi (.pem, .key, .cer, .cert, lainnya)
  • PKCS7 - Standar terbuka yang digunakan oleh Java dan didukung oleh Windows. Tidak mengandung bahan kunci pribadi.
  • PKCS12 - Standar pribadi Microsoft yang kemudian didefinisikan dalam RFC yang memberikan keamanan yang ditingkatkan dibandingkan format PEM teks biasa. Ini dapat berisi materi kunci pribadi. Ini digunakan secara istimewa oleh sistem Windows, dan dapat secara bebas dikonversi ke format PEM melalui penggunaan openssl.
  • DER - Format induk PEM. Sangat berguna untuk menganggapnya sebagai versi biner dari file PEM yang di-encode base64. Tidak rutin digunakan di luar Windows.

Saya harap ini membantu.

sysadmin1138
sumber
297
Hal yang hebat tentang standar adalah bahwa ada begitu banyak yang dapat dipilih ...
squillman
36
.crt adalah ekstensi umum lainnya untuk .cert dan .cer
David Pashley
44
PEM adalah format file yang dapat terdiri dari sertifikat (alias. Kunci publik), kunci pribadi atau memang keduanya digabung menjadi satu. Jangan terlalu memperhatikan ekstensi file; itu berarti Privacy Enhanced Mail, sebuah penggunaan yang tidak banyak digunakan tetapi format file macet.
Dan Carley
20
Jawaban yang sangat berguna, tapi saya rasa Anda belum membahas format .pub yang dibuat oleh ssh-keygen. Akan bermanfaat untuk mengetahui bagaimana hal itu berhubungan dengan yang lainnya.
Jez
24
Tidak bisa tidak memperhatikan "Email yang Ditingkatkan Privasi" akan memberikan akronim "PEE" yang bertentangan dengan "PEM". RFC cenderung menggunakan frasa "Privacy Enhanced Mail"
aidan
141

PEM itu sendiri bukan sertifikat, itu hanya cara penyandian data. Sertifikat X.509 adalah salah satu jenis data yang biasanya disandikan menggunakan PEM.

PEM adalah sertifikat X.509 (yang strukturnya didefinisikan menggunakan ASN.1), disandikan menggunakan ASN.1 DER (aturan penyandian yang dibedakan), kemudian dijalankan melalui pengkodean Base64 dan terjebak di antara garis jangkar teks biasa (BEGIN CERTIFICATE dan END CERTIFICATE ).

Anda dapat merepresentasikan data yang sama menggunakan representasi PKCS # 7 atau PKCS # 12, dan utilitas baris perintah openssl dapat digunakan untuk melakukan ini.

Manfaat jelas dari PEM adalah bahwa aman untuk menempelkan ke dalam tubuh pesan email karena memiliki garis jangkar dan bersih 7-bit.

RFC1422 memiliki rincian lebih lanjut tentang standar PEM karena terkait dengan kunci dan sertifikat.

James F
sumber
1
Bagaimana Anda melakukan ini "menggunakan baris perintah openssl"?
Samik R
2
Untuk mengkonversi file DER (.crt cer .der) ke PEM: openssl x509 -inform der -in cert.cer -out cert.pem. Untuk mengkonversi file PEM ke DER: openssl x509 -outform der -in cert.pem -out certi.der. Untuk mengkonversi PKCS # 12 berkas (.pfx .p12) yang berisi kunci pribadi dan sertifikat untuk PEM: openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes. Untuk mengonversi file sertifikat PEM dan kunci pribadi ke PKCS # 12 (.pfx .p12): openssl pkcs12 -export -out cert.pfx -inkey privateKey.key -in cert.crt -certfile CACert.crtDari sini
mpeac
55

Terkadang .crtfile sudah menjadi .pem. Lihat: https://stackoverflow.com/questions/991758/openssl-pem-key

mgold
sumber
4
Memang benar, saya baru memperhatikan hari ini. Saya harus memasukkan sertifikat PEM di rackspace loadbalancer dan saya bertanya-tanya apakah crt yang dihasilkan dalam format itu. Tapi itu berfungsi seperti itu, jadi itu kesimpulan saya juga, sebagian besar .crt ini datang dalam format PEM sepertinya.
Glenn Plas
@GlennPlas fokus alih-alih konten file, bukan nama atau ekstensinya. Itu bisa disebut .foobaruntuk semua yang penting ...
Patrick Mevzek