Kesalahan SSL - tidak dapat membaca sertifikat server dari file

37

Saya telah menyiapkan SSL untuk domain saya hari ini, dan telah menemukan masalah lain - saya berharap seseorang dapat menjelaskan ..

Saya terus menerima pesan kesalahan berikut:

[error] Init: Tidak dapat membaca sertifikat server dari file /etc/apache2/domain.com.ssl/domain.com.crt/domain.com.crt
[kesalahan] Kesalahan Perpustakaan SSL: 218529960 kesalahan: 0D0680A8: rutin pengkodean asn1: ASN1_CHECK_TLEN: tag salah
[kesalahan] Kesalahan Perpustakaan SSL: 218595386 kesalahan: 0D07803A: rutin pengkodean asn1: ASN1_ITEM_EX_D2I: kesalahan asn1 bersarang

Saya menjalankan Apache 2.2.16 dan Ubuntu 10.10. File .crt saya memiliki tag Begin dan End, dan telah disalin tepat dari email konfirmasi yang saya terima, sangat membuat frustrasi!

Tepuk tangan!

Sunting >> Ketika mencoba memverifikasi .crt Tampaknya tidak berfungsi:

>> openssl x509 -tidak ada -teks -di domain.com.crt 
tidak dapat memuat sertifikat
16851: kesalahan: 0906D06C: rutinitas PEM: PEM_read_bio: tidak ada baris awal: pem_lib.c: 650: Mengharapkan: SERTIFIKAT TERPERCAYA

Juga >>

>> openssl x509 -teks -informasi PEM -in domain.com.crt
tidak dapat memuat sertifikat
21321: kesalahan: 0906D06C: rutinitas PEM: PEM_read_bio: tidak ada baris awal: pem_lib.c: 650: Mengharapkan: SERTIFIKAT TERPERCAYA
>> openssl x509 -teks -informasikan DER -in domain.com.crt
tidak dapat memuat sertifikat
21325: kesalahan: 0D0680A8: rutinitas penyandian asn1: ASN1_CHECK_TLEN: tag salah: tasn_dec.c: 1316:
21325: kesalahan: 0D07803A: rutin pengkodean asn1: ASN1_ITEM_EX_D2I: nested asn1 error: tasn_dec.c: 380: Type = X509

Sunting >> (Bersulang untuk bantuannya)

>> grep '^ -----' domain.com.crt
----- MEMULAI SERTIFIKAT -----
----- AKHIR SERTIFIKAT -----

Baru saja mengirim email ke perusahaan yang menyediakan Sertifikat, mereka menjawab>

Saya telah memeriksa file CSR yang Anda berikan dan saya dapat memastikan bahwa ini dibuat dengan benar. Kesalahan yang Anda temui saat ini disebabkan karena Anda menggunakan baris perintah yang salah untuk menginstal CSR. Anda perlu memodifikasi domain.com.crt ini dari baris perintah Anda dengan nama domain Anda yang sesuai.

  • saat ini crt diatur ke mysite.com.crt - Saya telah menggunakan domain.com.crt sebagai contoh
williamsowen
sumber
Bisakah Anda menunjukkan kepada kami output dari grep '^-----' domain.com.crt?
quanta
Williamsowen, seluruh poin sertifikat harus ditunjukkan kepada siapa saja yang terhubung ke server web Anda; itu bukan masalah pribadi. Itu diberikan, apakah Anda akan mempertimbangkan melampirkan atau memposting seluruh sertifikat di sini sehingga kami dapat melihatnya langsung daripada harus menebak?
MadHatter mendukung Monica
Tunggu, saya melihat Anda baru saja menerima jawaban saya. Apakah itu berarti bahwa itu adalah terminal baris Windows yang menyebabkan masalah?
MadHatter mendukung Monica
MadHatter - permintaan maaf! Baru dalam hal ini, tetapi saya baru saja berfungsi, pemformatan dari email yang saya terima tidak aktif, tidak cukup berterima kasih kepada kalian!
williamsowen

Jawaban:

49

Apakah mungkin bahwa garis-garis tersebut diakhiri dengan M? Ini adalah masalah potensial ketika memindahkan file dari Windows ke sistem UNIX. Salah satu cara mudah untuk memeriksa adalah dengan menggunakan vidalam mode "tunjukkan biner", dengan vi -b /etc/apache2/domain.ssl/domain.ssl.crt/domain.com.crt.

Jika setiap baris diakhiri dengan kontrol-M, seperti ini

-----BEGIN CERTIFICATE-----^M
MIIDITCCAoqgAwIBAgIQL9+89q6RUm0PmqPfQDQ+mjANBgkqhkiG9w0BAQUFADBM^M
MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg^M
THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0wOTEyMTgwMDAwMDBaFw0x^M

Anda punya file dalam format Windows-terminated, dan apache tidak suka itu.

Pilihan Anda termasuk memindahkan file lagi, lebih berhati-hati; atau menggunakan dos2unixperintah untuk menghapusnya; Anda juga dapat menghapusnya di dalam vi, jika Anda berhati-hati.


Sunting : terima kasih kepada @ dave_thompson_085, yang menunjukkan bahwa jawaban ini tidak lagi berlaku pada 2019. Artinya, Apache / OpenSSL sekarang toleran terhadap baris yang diakhiri dengan ^ M, sehingga tidak menimbulkan masalah. Yang mengatakan, kesalahan pemformatan lainnya, beberapa contoh berbeda yang muncul di komentar, masih dapat menyebabkan masalah; periksa dengan seksama untuk ini jika sertifikat telah dipindahkan melintasi sistem.

MadHatter mendukung Monica
sumber
Bagi saya itu adalah kesalahan salin & tempel, menghilangkan beberapa karakter pertama dari header -----BE... Terima kasih atas inspirasi untuk memeriksa ulang!
cfi
Terima kasih, ini masalah saya! Di notepad ++ di windows Anda dapat menggunakan dialog konversi EDIT-EOL untuk mengubah mengatur format LF yang benar. Dan Anda dapat menggunakan menu View-Show Symbol untuk benar-benar melihat akhiran garis CR Windows LF.
Bjørn
1
Sertifikat saya akhirnya menjadi file kosong. Saya kira ada sesuatu yang rusak di generasi ini. Jawaban ini mendorong saya untuk membukanya dan melihatnya.
flickerfly
Catatan untuk pengguna Windows: Anda mungkin perlu mengonversi format baris ke UNIX bahkan jika Anda menggunakan Windows. DOS2UNIX bukan perintah Windows, tetapi perintah Linux. Berita baiknya, Git untuk Windows menyediakannya. CigWin mungkin juga melakukannya, tetapi tidak yakin tentang hal itu.
Ignacio Segura
Catatan untuk pengguna Windows: daftar izin di tab Properties / Security Windows Explorer akan kacau setelah menyalin file izin terbatas dari berbagi jaringan dengan cp Cygwin. Misalnya, saya melihat entri "NUL SID", entri Semua Orang dan pengguna yang dinonaktifkan.
belut ghEEz
19

Bagi siapa pun yang tiba di halaman ini dengan kesalahan yang sama ketika mencoba membaca Permintaan Penandatanganan Sertifikat (CSR) (perhatikan bahwa OP sedang membaca sertifikat): pastikan untuk menggunakan perintah OpenSSL yang tepat. x509untuk sertifikat dan requntuk CSR:

openssl req -in server.csr -text -noout

vs.

openssl x509 -in server.crt -text -noout
Martijn de Milliano
sumber
17

Hanya berputar-putar dalam lingkaran ini, dan ternyata saya memiliki sertifikat di jalan yang salah - misalnya

SSLCertificateFile    /etc/apache2/ssl/server.key
SSLCertificateKeyFile /etc/apache2/ssl/server.crt

dari pada:

SSLCertificateFile    /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key

Sesuatu untuk diperiksa jika Anda mendapatkan kesalahan ini.

Adrian Macneil
sumber
11
>> openssl x509 -noout -text -in domain.com.crt 
unable to load certificate
16851:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:650:Expecting: TRUSTED CERTIFICATE

Saya menduga Anda memiliki masalah dengan format sertifikat.

Jalankan kedua dari dua perintah berikut dan beri kami output:

openssl x509 -text -inform DER -in domain.com.crt 
openssl x509 -text -inform PEM -in domain.com.crt 
kuanta
sumber
Terima kasih atas jawaban ini. Saya dapat menentukan format SA saya yang disediakan sebagai ".cer" sudah ".pem" incognito
javafueled
10

Dalam kasus saya, saya menemukan sertifikat saya memiliki karakter "-" yang berbeda. Pasti ada masalah salin / tempel dari admin yang menempatkan sertifikat ke server, dengan mengganti editor teks - dengan karakter unicode khusus di sepanjang jalan.

Ini membutuhkan waktu berjam-jam untuk mendiagnosis, dan pada akhirnya saya hanya menebaknya, dan mengedit sertifikat di vi dan menghapus karakter "-" yang ada, dan mengetik ulang.

Semoga ini bisa membantu seseorang.

Scott Davey
sumber
8

Dalam kasus saya, saya menemukan kesalahan OP karena siapa pun yang membuat file .crt untuk saya sejak awal benar-benar membuat file berformat .PEM , dan menamakannya .crt.

Saya menemukan ini dengan menjalankan ke dalam panduan bermanfaat berikut ini: https://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cs-vs-cer-vs-pem-certificates-and-how -untuk-mengkonversi-mereka

yang harus saya lakukan adalah mengubah nama .crt menjadi .pem, dan saya selesai! Panduan ini menunjukkan bahwa kesalahan dari pertanyaan OP menyiratkan bahwa file input sudah diformat PEM, jadi upaya untuk mengubahnya menjadi .pem dari format DER tidak dapat dilakukan, dan pada kenyataannya tidak perlu.

Freya301
sumber
4

Pastikan file Anda tidak memiliki spasi tambahan atau spasi terdepan dalam file sertifikat. Dengan hati-hati memastikan tidak ada spasi atau kosong dalam file sertifikat Anda, dengan memilih seluruh teks dan mencari ruang kosong pada editor hanya teks.

Juga periksa apakah memang semua file yang dikonfigurasi ada dan benar.

Misalnya: pada posting Anda yang lain, Anda mengatakan bahwa file .key Anda bernama my domain.com.crt sementara pada konfigurasi vhost Anda memiliki domain.com.crt

SSLCertificateFile /etc/apache2/domain.ssl/domain.ssl.crt/domain.com.crt
SSLCertificateKeyFile /etc/apache2/domain.ssl/domain.ssl.key/domain.com.key
SSLCertificateChainFile /etc/apache2/domain.ssl/ca.crt
SSLCACertificateFile /etc/apache2/domain.ssl/gs_intermediate_ca.crt

Periksa lagi apakah semua file di atas benar-benar ada dan valid.

George Tasioulis
sumber
1
Periksa juga apakah tanda hubung Anda adalah tanda hubung. Editor teks Microsoft ingin berubah --menjadi ; itu tidak menyenangkan untuk dipecahkan.
Shane Madden
ya, karena Anda menggunakan Ubuntu, cukup buka terminal dan gunakan nano misalnya. Dengan cara ini Anda akan yakin.
George Tasioulis
Hai, terima kasih atas umpan balik Anda - Saya sudah memeriksa semuanya dan semuanya baik-baik saja. Saya sudah mencoba memverifikasi file crt namun saya mendapatkan:sudo openssl x509 -noout -text -in domain.com.crt unable to load certificate 16851:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:650:Expecting: TRUSTED CERTIFICATE
williamsowen
1
Apakah baris pertama file domain.com.crt Anda dimulai dengan -----BEGIN CERTIFICATE-----dan baris terakhir berakhir dengan -----END CERTIFICATE-----?
George Tasioulis
1

Jika orang lain mengalami masalah ini dan log kesalahan apache Anda mengatakan sesuatu seperti:

Init: Tidak dapat membaca sertifikat server dari file /etc/apache2/domain.com.ssl/domain.com.crt/domain.com.crt

Pastikan Anda belum menukar file kunci dan sertifikat Anda dalam deklarasi di konfigurasi apache. Saya telah menunjuk kunci ke file sertifikat saya dan sertifikat ke file kunci saya. Posting ini membantu saya memecahkan masalah, tetapi saya ingin menunjukkannya sebagai potensi masalah / solusi lain.

Josh
sumber
0

Masalah saya (mengalami kesalahan yang sama saat menginstal server baru dengan Apache 2.4) adalah bahwa Apache (2.4) tidak dapat membaca file .crt biner. Saya mengimpornya di toko sertifikat pribadi saya (dengan mmc) dan mengekspornya sebagai basis-64 yang dikodekan X.509 (.cer). Mengganti nama file yang diekspor ke nama yang sama (.crt) (digunakan di httpd-ssl.conf saya) dan berhasil lagi! Sertifikat yang sama bekerja di server lama saya, mungkin Apache 2.4 lebih ketat dari 2.2? Semoga berhasil.

Pesta
sumber
0

Dalam kasus saya, ini ada hubungannya dengan BOM yang ada dalam file. Orang bisa menghapusnya seperti ini:

tail -c +4 ssl.crt > ssl2.crt

Tidak yakin apakah selalu membutuhkan 3 byte, jadi cara yang lebih baik adalah:

vi -c 'se nobomb' -c wq ssl.crt
x-yuri
sumber
0

Saya mendapat kesalahan yang sama karena saya beralih .key dengan nama file .crt

Tobia
sumber
0

Saya memiliki masalah yang sama ketika saya tidak sengaja menggunakan sertifikat IIS tipe p7b yang disediakan pelanggan di konfigurasi apache. Mengubah format cert ke x509 memperbaiki kesalahan. Kedua jenis terlihat sama di permukaan tetapi tampaknya berbeda di bagian dalam.

Uwe
sumber
0

Saya mengalami masalah ini karena saya dikirim konten file .p7b gaya IIS disisipkan ke email. Ini memiliki tag "----- BEGIN CERTIFICATE -----" dan "----- END CERTIFICATE -----", sama seperti .pem, dan kontennya menggunakan pengkodean base64 yang mirip. Saya mengonversinya menjadi file * .pem seperti ini:

openssl pkcs7 -print_certs -in cert.p7b -out cert.cer

Setelah itu, Apache 2.2 senang.

Derek
sumber
0

Saya baru-baru ini memiliki masalah ini menggunakan Lets Encrypt (letsencrypt) di Windows. Sertifikat itu kembali dikodekan sebagai UTF-16LE. Mengubahnya ke UTF-8 (menggunakan dos2unix) memecahkan masalah.

Jeff Hoye
sumber
0

Dalam kasus saya hanya garis kosong. Ketika saya menempelkan file crt dari ntepad atau notepad ++ di nano selalu seperti

sdgrgrgr rgregegreg rgrgreg
rgregreg rggregregr rgregrg

menghapus ruang kosong dan putig semua dalam satu baris menyelesaikan masalah Mis:

sdgrgrgr
rgregegreg
rgrgreg
rgregreg
rggregregr
rgregrg
Teodor
sumber