SSL: kesalahan: 0B080074: x509 sertifikat rutin: X509_check_private_key: nilai kunci tidak cocok

102

Saya tidak dapat menyiapkan SSL. Saya telah mencari Google dan saya menemukan beberapa solusi tetapi tidak ada yang berhasil untuk saya. Saya butuh bantuan tolong ...

Inilah kesalahan yang saya dapatkan ketika saya mencoba memulai ulang nginx:

root@s17925268:~# service nginx restart
Restarting nginx: nginx: [emerg] SSL_CTX_use_PrivateKey_file("/etc/nginx/conf.d/ssl/ssl.key") failed (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)
nginx: configuration file /etc/nginx/nginx.conf test failed

Sertifikat saya dari StartSSL dan berlaku selama 1 tahun.

Inilah yang saya uji:

  • Sertifikat dan kunci pribadi tidak memiliki spasi tambahan.
  • Saya tidak menggunakan file server.key default.
  • Saya memeriksa nginx.conf dan arahannya mengarah ke kunci pribadi dan sertifikat yang benar.

Saya juga memeriksa modulusnya, dan saya mendapatkan modulus yang berbeda untuk kunci dan sertifikat.

Terima kasih untuk bantuannya. :)

Galou
sumber

Jawaban:

37

Saya mendapat hash MD5 dengan hasil berbeda untuk kunci dan sertifikat.

Ini menjelaskan semuanya. Anda memiliki ketidakcocokan antara kunci dan sertifikat Anda.

Modulusnya harus cocok. Pastikan Anda memiliki kunci yang benar.

dev0z
sumber
Kecuali saya melewatkan sesuatu, Anda benar-benar INGIN kunci publik dan privat (file sertifikat dan file kunci) berbeda.
Mark Berry
1
Bagian modulus' and the eksponen publik 'dalam kunci dan Sertifikat harus cocok. Tidak diragukan lagi, filenya berbeda. Kunci dibuat untuk satu sertifikat tertentu.
dev0z
Salahku. Saya pikir dia mengacu pada MD5 file. Saya melihat sekarang bahwa sertifikat memiliki fungsi modulus terpisah: Bagaimana cara mengonfirmasi bahwa modulus di kunci pribadi Anda cocok dengan modulus dalam kunci publik sertifikat SSL / TLS Anda sebelum penginstalan? .
Mark Berry
168

Setelah Anda menetapkan bahwa mereka tidak cocok, Anda masih memiliki masalah - apa yang harus dilakukan. Seringkali, sertifikat mungkin dirakit dengan tidak benar. Saat CA menandatangani sertifikat Anda, mereka mengirimi Anda blok yang terlihat seperti

-----BEGIN CERTIFICATE-----
MIIAA-and-a-buncha-nonsense-that-is-your-certificate
-and-a-buncha-nonsense-that-is-your-certificate-and-
a-buncha-nonsense-that-is-your-certificate-and-a-bun
cha-nonsense-that-is-your-certificate-and-a-buncha-n
onsense-that-is-your-certificate-AA+
-----END CERTIFICATE-----

mereka juga akan mengirimi Anda bundel (seringkali dua sertifikat) yang mewakili otoritas mereka untuk memberi Anda sertifikat. ini akan terlihat seperti ini

-----BEGIN CERTIFICATE-----
MIICC-this-is-the-certificate-that-signed-your-request
-this-is-the-certificate-that-signed-your-request-this
-is-the-certificate-that-signed-your-request-this-is-t
he-certificate-that-signed-your-request-this-is-the-ce
rtificate-that-signed-your-request-A
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICC-this-is-the-certificate-that-signed-for-that-one
-this-is-the-certificate-that-signed-for-that-one-this
-is-the-certificate-that-signed-for-that-one-this-is-t
he-certificate-that-signed-for-that-one-this-is-the-ce
rtificate-that-signed-for-that-one-this-is-the-certifi
cate-that-signed-for-that-one-AA
-----END CERTIFICATE-----

kecuali sayangnya, mereka tidak diberi label dengan jelas.

praktik umum, kemudian, adalah menggabungkan semua ini menjadi satu file - sertifikat Anda, lalu sertifikat penandatanganan. Namun karena tidak mudah dibedakan, terkadang seseorang secara tidak sengaja menempatkannya di urutan lain - menandatangani sertifikat, lalu sertifikat akhir - tanpa menyadarinya. Dalam hal ini, sertifikat Anda tidak akan cocok dengan kunci Anda.

Anda dapat menguji untuk melihat apa yang menurut cert itu diwakili dengan menjalankan

openssl x509 -noout -text -in yourcert.cert

Di dekat bagian atas, Anda akan melihat "Subjek:" dan hal-hal yang terlihat seperti data Anda. Jika sebaliknya terlihat seperti CA Anda, paket Anda mungkin dalam urutan yang salah; Anda dapat mencoba membuat cadangan, lalu memindahkan sertifikat terakhir ke awal, dengan harapan sertifikat itu adalah sertifikat Anda.

Jika ini tidak berhasil, Anda mungkin hanya perlu mendapatkan sertifikat yang diterbitkan ulang. Ketika saya membuat CSR, saya suka memberi label dengan jelas untuk apa server itu (bukan hanya ssl.key atau server.key) dan membuat salinannya dengan tanggal dalam nama, seperti mydomain.20150306.key dll dengan cara itu pasangan kunci privat dan publik tidak mungkin tercampur dengan perangkat lain.

Vynce
sumber
1
Ini memperbaikinya untuk saya di Nginx!
TTT
24
+1 yang sangat besar untuk menunjukkan cara melihat apa yang ada di rantai sertifikat.
cbednarski
Sangat berguna, saya menghabiskan satu jam mencoba memahami mengapa nginx menolak sertifikat sementara saya bisa melihatnya berisi data
Jacopofar
3
Oke, ini juga berfungsi untuk saya dengan sertifikat Comodo dan Ngix. Baru saja mendorong blok sertifikat terakhir ke atas. Terima kasih atas penjelasan dan wawasan rinci tentang masalah ini.
Andy D
1
Ini membantu saya untuk! Jawaban yang sangat berguna! Terima kasih banyak!
Oleg Klimenko
71
  1. Pastikan sertifikat dan Kunci Anda dalam format PEM. Jika tidak, maka konversikan menggunakan perintah openssl
  2. Periksa hash MD5 dari kunci publik untuk memastikan bahwa itu cocok dengan apa yang ada di kunci pribadi

    openssl x509 -noout -modulus -in certificate.crt | openssl md5
    openssl rsa -noout -modulus -in privateKey.key | openssl md5
    
dev0z
sumber
7
Saran yang bagus ! Yah, masih mendapatkan kesalahan yang sama meskipun hash md5 sama untuk saya ^^
Delphine
4
Terima kasih telah menyertakan cara memverifikasi hash. Saya menemukan saya mengalami kesalahan salin tempel, dan kehilangan satu tanda hubung dari awal pem saya. Anda baru saja menyelamatkan saya dari banyak sakit kepala. Bersulang.
Justin Fortier
38

Saya mengalami masalah ini karena saya menambahkan bundel dan sertifikat dalam urutan yang salah jadi mungkin ini bisa membantu orang lain.

Sebelumnya (yang salah):

cat ca_bundle.crt certificate.crt > bundle_chained.crt

Setelah (yang benar)

cat certificate.crt ca_bundle.crt > bundle_chained.crt

Dan Tolong jangan lupa untuk memperbarui conf yang sesuai (ssl_certificate sekarang harus mengarah ke crt yang dirantai) sebagai

server {
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     bundle_chained.crt;
    ssl_certificate_key www.example.com.key;
    ...
}

Dari halaman manual nginx :

Jika sertifikat server dan bundel telah digabungkan dalam urutan yang salah, nginx akan gagal untuk memulai dan akan menampilkan pesan kesalahan:

SSL_CTX_use_PrivateKey_file(" ... /www.example.com.key") failed
   (SSL: error:0B080074:x509 certificate routines:
    X509_check_private_key:key values mismatch)
Mandeep Gill
sumber
3
Ini sebenarnya adalah jawaban yang lebih baik untuk pertanyaan itu daripada yang diterima.
baldrs
9

Jika hal ini terjadi dan Anda menggunakan Mari Encrypt / certbot, alasannya adalah kemungkinan besar Anda digunakan chain.pemsebagai pengganti fullchain.pem.

Seharusnya seperti ini:

ssl_certificate /etc/certbot/live/example.com/fullchain.pem;
ssl_certificate_key /etc/certbot/live/example.com/privkey.pem;

Lihat dokumen certbot "Di mana sertifikat saya?"

Marian
sumber
Atau urutan sertifikat dalam bundel salah: pertama letsencrypt, lalu sertifikat sendiri.
ingopingo
5

Saya memiliki masalah yang sama dan akhirnya menyelesaikannya dengan mengubah urutan blok pem dalam file sertifikat.

Blok cert harus diletakkan di awal file, lalu blok perantara, lalu blok root.

Saya menyadari masalah ini dengan membandingkan file sertifikat yang bermasalah dengan file sertifikat yang berfungsi.

fuweichin
sumber
1

5 sen saya untuk masalah ini:

Saya memiliki masalah yang sama. Setelah sekitar 1 jam menjaganya, ternyata saya salah menempelkan sertifikat.

Jika Anda mengalami kesalahan seperti ini, silakan periksa sertifikat Anda.

Nick
sumber
1

Dalam kasus saya, saya ingin mengubah sertifikat SSL, karena saya telah mengubah server saya jadi saya harus membuat CSR baru dengan perintah ini:

 openssl req -new -newkey rsa:2048 -nodes -keyout mysite.key -out mysite.csr

Saya telah mengirim file mysite.csr ke perusahaan penyedia SSL dan setelah saya menerima sertifikat crt dan kemudian saya telah memulai ulang nginx, dan saya mendapatkan kesalahan ini

 (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)

Setelah banyak penyelidikan, kesalahannya adalah modul dari file kunci tidak sama dengan modul dari file crt

Jadi, untuk membuatnya berfungsi, saya telah membuat file csr baru tetapi saya harus mengubah nama file dengan perintah ini

 openssl req -new -newkey rsa:2048 -nodes -keyout mysite_new.key -out mysite_new.csr

Kemudian saya menerima file crt baru dari penyedia perusahaan, restart nginx dan berhasil.

ikan lemon
sumber
0

Ini juga dapat terjadi ketika CA Anda mengeluarkan sertifikat perantara

Saya mengalami masalah ini (dua kali) dengan nginx dan tidak ada solusi dalam posting ini yang menjelaskan masalah tersebut. Pos blog di sini oleh seorang pria baik bernama Marco berhasil, dan saya menempelkannya di sini untuk siapa saja yang juga mengalami apa yang saya lihat. https://medium.com/@mrkdsgn/steps-to-install-a-go-daddy-ssl-certificate-on-nginx-on-ubuntu-14-04-ff942b9fd7ff

Dalam kasus saya, go-daddy adalah CA dan ini khusus untuk cara mereka mengeluarkan sertifikat dan bundel sertifikat perantara.

Berikut kutipan dari postingan blog Marco

Dengan Nginx, jika CA Anda menyertakan sertifikat perantara, Anda harus membuat file sertifikat berantai tunggal yang berisi sertifikat Anda dan sertifikat perantara CA.

Anda dapat menggunakan perintah ini untuk membuat file gabungan bernama example.com.chained.crt:

cat example.com.crt intermediate.crt > example.com.chained.crt

Shyam Habarakada
sumber
0

Saya kasus saya, masalahnya adalah saya membuat sertifikat tanpa memasukkan data apa pun di antarmuka cli. Ketika saya membuat ulang sertifikat dan memasukkan semua bidang: Kota, Negara Bagian, dll semuanya menjadi baik-baik saja.

 sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt
Viktor Kruglikov
sumber
0

Itu terjadi pada saya ketika saya menggabungkan bundle.crt dan sertifikat utama. Alasannya adalah saya menyalin sertifikat utama di bawah bundle.crt. Seharusnya sebaliknya

1 / sertifikat utama 2 / bundle.crt

Krishna
sumber
0

Untuk Nginx:

  1. openssl req -newkey rsa:2048 -nodes -keyout domain.com.key -out domain.com.csr

  2. File domain_com.crtdan file SSL domain_com.ca-bundle, lalu copy file baru di paste domain.com.chained.crt.

3: Tambahkan file nginx:

  1. ssl_certificate /home/user/domain_ssl/domain.com.chained.crt;
  2. ssl_certificate_key /home/user/domain_ssl/domain.com.key;

Akhir-akhir ini restart Nginx.

electrocoder
sumber
0

SL_CTX_use_PrivateKey ("/ etc / nginx / ssl / file") gagal (SSL: kesalahan: 0B080074: x509 sertifikat rutin: X509_check_private_key: nilai kunci tidak cocok)

Kesalahan ini dapat terjadi, ketika kunci privat sertifikat ( ssl_certificate_keymisalnya, .keyatau .pemfile) tidak cocok dengan file sertifikat publik ( ssl_certificate) dalam konfigurasi Nginx Anda (check nginx.confatau in sites-enabled/). Pastikan kedua file cocok.

Periksa log kesalahan Nginx untuk detail lebih lanjut (misalnya /var/log/nginx/error.log).

kenorb
sumber
0

Dalam kasus saya, saya harus menggabungkan sertifikat domain saya.

cat myDomain.crt EntityCertCA.crt TrustedRoot.crt > bundle.crt

Dan di file konfigurasi /etc/nginx/nginx.conf

 ssl_certificate "/etc/pki/nginx/bundle.crt";

Mulai ulang layanan dan semuanya ok.

systemctl restart nginx.service

Sumber langkah 2: https://www.namecheap.com/support/knowledgebase/article.aspx/9781/2238/nginx-ssl-error0b080074x509-certificate-routines-x509checkprivatekeykey-values-mismatch

mariofertc.dll
sumber