Apakah saya perlu mengonversi .CER ke .CRT untuk sertifikat Apache SSL? Jika ya, bagaimana caranya?

121

Saya perlu menyiapkan server Apache 2 dengan SSL.

Saya memiliki file * .key saya, tetapi semua dokumentasi yang saya temukan online, file * .crt ditentukan, dan CA saya hanya memberi saya file * .cer.

Apakah file * .cer sama dengan * .crt? Jika tidak, bagaimana cara mengubah CER ke format CRT?

M N
sumber
11
CERdan CRTekstensi tidak ada artinya. Vendor PKI yang berbeda menggunakan ekstensi yang berbeda untuk hal yang sama. Jika file tersebut biner, maka mungkin ASN.1 / DER dikodekan. Jika file tersebut dapat dibaca manusia -----BEGIN CERTIFICATE-----, maka PEM dikodekan. Apa yang Anda miliki (DER atau PEM), dan apa yang Anda butuhkan (DER atau PEM)?
jww

Jawaban:

106

Ekstensi file untuk sertifikat kriptografi sebenarnya tidak terstandarisasi seperti yang Anda harapkan. Windows secara default memperlakukan .crtfile mengklik ganda sebagai permintaan untuk mengimpor sertifikat ke penyimpanan Sertifikat Root Windows, tetapi memperlakukan .cerfile sebagai permintaan hanya untuk melihat sertifikat. Jadi, mereka berbeda dalam arti bahwa Windows memiliki beberapa arti berbeda yang melekat untuk apa yang terjadi ketika Anda mengklik dua kali setiap jenis file.

Tetapi cara Windows menanganinya saat Anda mengklik dua kali adalah satu-satunya perbedaan di antara keduanya. Kedua ekstensi hanya menyatakan bahwa ekstensi tersebut berisi sertifikat publik. Anda dapat mengganti nama file sertifikat untuk menggunakan satu ekstensi menggantikan yang lain di file sistem atau konfigurasi apa pun yang pernah saya lihat. Dan pada platform non-Windows (dan bahkan di Windows), orang tidak terlalu berhati-hati tentang ekstensi mana yang mereka gunakan, dan memperlakukan keduanya secara bergantian, karena tidak ada perbedaan di antara keduanya selama konten file benar.

Yang membuat lebih membingungkan adalah bahwa ada dua cara standar untuk menyimpan data sertifikat dalam sebuah file: Satu adalah pengkodean "biner" X.509, dan yang lainnya adalah pengkodean "teks" base64 yang biasanya dimulai dengan " -----BEGIN CERTIFICATE-----". Ini menyandikan data yang sama tetapi dengan cara yang berbeda. Sebagian besar sistem menerima kedua format tersebut, tetapi, jika perlu, Anda dapat mengonversi satu format ke format lainnya melalui openssl atau alat lainnya. Pengkodean dalam file sertifikat benar-benar independen dari ekstensi mana yang diberikan seseorang pada file tersebut.

TylerH
sumber
Pemahaman saya adalah bahwa mereka berdua X.509 pengkodean. Anda tidak mengatakan sebaliknya, tetapi penggunaan asimetris x.509 di atas mungkin menyarankan sebaliknya bagi pembaca. Bagi pembaca, perlu dicatat bahwa sertifikat dapat dikonversi bolak-balik antara 2 pengkodean ini, karena seperti yang disebutkan dalam jawaban ini, sertifikat tersebut menyimpan informasi yang sama. Lihat jawaban lain dengan perintah openssl x509 -inform.
FreeText
55

Menurut dokumentasi mod_ssl :

SSLCertificateFile: 
   Name: SSLCertificateFile
   Description: Server PEM-encoded X.509 certificate file

File sertifikat harus file Sertifikat X.509 berenkode PEM:

openssl x509 -inform DER -in certificate.cer -out certificate.pem
Dmitry Grigansky
sumber
Akankah ini menyelesaikan kesalahan sertifikat ssl, saat berada di belakang zscaler, berjalan vagrantdi win( vbox homestead), dengan menginstal sertifikat akar tepercaya kami ke dalam kotak gelandangan? Saya memilikinya scp, kemudian menggunakan konversi Anda dan menghubungkannya dengan symlink ke /etc/ssl/certsdan juga menyalin isinya ke dalam ca-certificates.crtfile sebelum melakukan reprovisioning, dan masih mendapatkan google-recaptcha tls sslkesalahan pada file_get_contentskotak dev.
blamb
54

Pada dasarnya ada dua jenis pengkodean sertifikat CER, DER dan Base64. Ketika tipe DER mengembalikan sertifikat pemuatan kesalahan (rutin pengkodean asn1), coba PEM dan itu akan bekerja.

openssl x509 -inform DER -in certificate.cer -out certificate.crt

openssl x509 -inform PEM -in certificate.cer -out certificate.crt

Liibo
sumber
3
Format DER berfungsi untuk saya ketika file cer saya tampak seperti biner ketika saya mencoba mengeditnya ... terima kasih!
Brad Parks
1
Bagi pembaca, saya menemukan halaman manual openssl berguna. Bagi saya adalah ambigu perintah mana yang melakukan apa (yaitu ke arah mana konversi). Parameter -inform menentukan format file input -in, yang intuitif, tetapi jika Anda sudah agak bingung, ada baiknya mengetahui secara eksplisit. Lihat openssl.org/docs/manmaster/man1/openssl-x509.html
FREETEXT
32

Saya berasumsi bahwa Anda memiliki file .cer yang berisi data sertifikat yang dikodekan PKCS # 7 dan Anda ingin mengubahnya menjadi data sertifikat yang dikodekan PEM (biasanya file .crt atau .pem). Misalnya, file .cer yang berisi data yang dikodekan PKCS # 7 terlihat seperti ini:

----- MULAI PKCS7 -----
MIIW4gYJKoZIhvcNAQcCoIIW0zCCFs8CAQExADALBgkqhkiG9w0BBwGggha1MIIH
...
POI9n9cd2cNgQ4xYDiKWL2KjLB + 6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G
+ bKhADEA
----- AKHIR PKCS7 -----

Data sertifikat PEM terlihat seperti ini:

----- MULAI SERTIFIKAT -----
MIIHNjCCBh6gAwIBAgIQAlBxtqKazsxUSR9QdWWxaDANBgkqhkiG9w0BAQUFADBm
...
nv72c / OV4nlyrvBLPoaS5JFUJvFUG8RfAEY =
----- AKHIR SERTIFIKAT -----

Ada perintah OpenSSL yang akan mengonversi file .cer (dengan data PKCS # 7) ke data PEM yang mungkin Anda harapkan ( BEGIN CERTIFICATEblok pada contoh di atas). Anda dapat memaksa data PKCS # 7 ke dalam format PEM dengan perintah ini pada file yang akan kami sebut certfile.cer:

openssl pkcs7 -text -in certfile.cer -print_certs -outform PEM -out certfile.pem

Perhatikan bahwa file .cer atau .pem mungkin berisi satu atau lebih sertifikat (mungkin seluruh rantai sertifikat).

Karl Ward
sumber
1
Akan berguna jika Anda memiliki sumber asumsi ini. Saya pikir orang menggunakan (mungkin salah) .cer, .crt, .pem secara bergantian) sehingga memiliki sumber kebenaran akan memperbaiki kesalahpahaman.
PhilT
30

CER adalah sertifikat X.509 dalam bentuk biner, dikodekan DER .
CRT adalah sertifikat X.509 biner, yang dienkapsulasi dalam pengkodean teks ( base-64 ).

Ini bukan pengkodean yang sama.

Spawnrider
sumber
13
Jawaban ini salah. Baik .CER dan .CRT dapat menggunakan encoding DER atau PEM (teks). Ekstensi .pem dan .der mencerminkan pengkodean, .cer dan .crt tidak. Lebih detail .
eis
1
Sebenarnya, seharusnya sebaliknya. Tetapi semua ekstensi itu telah membingungkan untuk waktu yang lama, jadi Anda tidak boleh mengandalkannya.
Claudio Floreani
16

Jawaban untuk pertanyaan bagaimana mengonversi file .cer menjadi file .crt (mereka dikodekan secara berbeda!) Adalah:

openssl pkcs7 -print_certs -in certificate.cer -out certificate.crt
Alexander Presber
sumber
5
Ini tidak berhasil untuk saya! Saya menggunakan:openssl x509 -inform der -in certificate.cer -out certificate.pem
sj59
Saya mendapatkan pesan kesalahan ini:unable to load PKCS7 object
friederbluemle
@friederbluemle apakah Anda melihat jawaban ini? serverfault.com/questions/417140/…
Alexander Presber
Inilah yang harus saya lakukan untuk mendapatkan sertifikat SSL positif saya siap diubah menjadi PKCS12 untuk digunakan di Azure.
Owen
16

Saya menggunakan perintah:

openssl x509 -inform PEM -in certificate.cer -out certificate.crt

Tetapi CER adalah sertifikat X.509 dalam bentuk biner, dikodekan DER. CRT adalah sertifikat X.509 biner, yang dienkapsulasi dalam pengkodean teks (base-64).

Oleh karena itu, Anda mungkin harus menggunakan:

openssl x509 -inform DER -in certificate.cer -out certificate.crt

Dan kemudian untuk mengimpor sertifikat Anda:

Salin CA Anda ke dir:

/usr/local/share/ca-certificates/

Gunakan perintah:

sudo cp foo.crt /usr/local/share/ca-certificates/foo.crt

Perbarui penyimpanan CA:

sudo update-ca-certificates

Hugo LM
sumber
5

Jika file cer Anda memiliki format biner, Anda harus mengubahnya dengan

openssl x509 -inform DER -in YOUR_CERTIFICATE.cer -out YOUR_CERTIFICATE.crt
Mustafa Burak Kalkan
sumber
3

File .cer dan .crt harus dapat dipertukarkan sejauh mengimpornya ke dalam keystore.

Lihat konten file .cer. Hapus apa pun sebelum -----BEGIN CERTIFICATE-----garis dan sesudah -----END CERTIFICATE-----garis. Anda akan ditinggalkan dengan baris BEGIN / END dengan banyak hal yang dikodekan Base64 di antara mereka.

-----BEGIN CERTIFICATE-----
MIIDQTCCAqqgAwIBAgIJALQea21f1bVjMA0GCSqGSIb3DQEBBQUAMIG1MQswCQYD
...
pfDACIDHTrwCk5OefMwArfEkSBo/
-----END CERTIFICATE-----

Kemudian impor saja ke keyfile Anda menggunakan keytool.

keytool -import -alias myalias -keystore my.keystore -trustcacerts -file mycert.cer
Gene Gotimer
sumber
Hal yang membantu saya adalah komentar Anda tentang BASE-64 ENCODING. Sertifikat normal tampaknya adalah pengkodean khusus dan bukan teks biasa yang dapat dibaca. Terima kasih.
DRapp
-2

Kerjakan saja

openssl x509 -req -days 365 -in server.cer -signkey server.key -out server.crt
Mutuma
sumber
8
Apakah Anda ingin menjelaskan secara rinci apa yang dilakukan baris ini dan mengapa tepatnya Anda menggunakan parameter tersebut? Jawaban ini cukup singkat dan mungkin sulit dipahami oleh orang yang kurang berpengalaman.
GameDroids