SSL: hata: 0B080074: x509 sertifika rutinleri: X509_check_private_key: anahtar değerleri eşleşmiyor


106

SSL ayarlayamıyorum. Googledim ve birkaç çözüm buldum ama hiçbiri benim için işe yaramadı. Biraz Yardıma ihtiyacım var lütfen...

İşte nginx'i yeniden başlatmaya çalıştığımda aldığım hata:

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

Sertifikam StartSSL'den ve 1 yıl süreyle geçerlidir.

İşte test ettiğim şey:

  • Sertifika ve özel anahtarın sonunda boşluk yoktur.
  • Varsayılan server.key dosyasını kullanmıyorum.
  • Nginx.conf dosyasını kontrol ettim ve yönergeler doğru özel anahtarı ve sertifikayı gösteriyor.

Ayrıca modülü kontrol ettim ve hem anahtar hem de sertifika için farklı bir modül elde ettim.

Yardımın için teşekkürler. :)

Yanıtlar:


37

Hem anahtar hem de sertifika için farklı sonuçlara sahip bir MD5 karması aldım.

Bu her şeyi söylüyor. Anahtarınız ve sertifikanız arasında bir uyumsuzluk var.

Modülüs eşleşmelidir. Doğru anahtara sahip olduğunuzdan emin olun.


Bir şeyi kaçırmadığım sürece, kesinlikle genel ve özel anahtarların (sertifika dosyası ve anahtar dosyası) farklı olmasını İSTİYORSUNUZ.
Mark Berry

1
modulus' and the Anahtar ve sertifika kamu üs' bölümleri aynı olmalıdır. Hiç şüphe yok ki dosyalar farklı. Anahtar, belirli bir sertifika için oluşturulur.
dev0z

Benim hatam. Dosyaların MD5'inden bahsettiğini sanıyordum. Şimdi sertifikaların ayrı bir modül işlevi olduğunu görüyorum: Özel anahtarınızdaki modülün, kurulumdan önce SSL / TLS sertifikanızın genel anahtarındaki modülle eşleştiğini nasıl doğrulayabilirim? .
Mark Berry

173

Eşleşmediklerini belirledikten sonra, hala bir sorununuz var - bu konuda ne yapmalısınız? Çoğu zaman, sertifika yalnızca yanlış bir şekilde birleştirilebilir. Bir CA sertifikanızı imzaladığında, size şuna benzeyen bir blok gönderir:

-----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-----

ayrıca size sertifika verme yetkilerini temsil eden bir paket (genellikle iki sertifika) gönderirler. bu şeye benzeyecek

-----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-----

ancak maalesef bu kadar net bir şekilde etiketlenmeyecekler.

Bu durumda yaygın bir uygulama, bunların hepsini tek bir dosyada toplamaktır - sertifikanız, ardından imzalama sertifikaları. Ancak kolayca ayırt edilemedikleri için, bazen birisi yanlışlıkla onları başka bir sıraya koyar - sertifikaları imzalar, ardından son sertifika - fark etmeden. Bu durumda, sertifikanız anahtarınızla eşleşmeyecektir.

Sertifikanın neyi temsil ettiğini düşündüğünü görmek için test edebilirsiniz.

openssl x509 -noout -text -in yourcert.cert

Üst kısma yakın bir yerde "Konu:" ve ardından verilerinize benzeyen şeyler görmelisiniz. Bunun yerine CA'nız gibi görünüyorsa, paketiniz muhtemelen yanlış sıradadır; bir yedekleme yapmayı deneyebilir ve ardından son sertifikayı başa taşımayı deneyebilirsiniz.

Bu işe yaramazsa, sertifikayı yeniden vermeniz gerekebilir. Bir CSR oluşturduğumda, hangi sunucu için olduğunu açıkça etiketlemeyi (sadece ssl.key veya server.key yerine) ve mydomain.20150306.key gibi adında tarih ile bir kopyasını oluşturmayı seviyorum. özel ve genel anahtar çiftlerinin başka bir setle karışması pek olası değildir.


1
Bu, Nginx'te benim için düzeltti!
TTT

25
Sertifika zincirinde ne olduğunu görmek için büyük +1.
cbednarski

Kesinlikle yararlıdır, nginx'in sertifikayı neden reddettiğini anlamaya çalışırken, verileri içerdiğini görebiliyordum
Jacopofar

3
Tamam, bu benim için bir Comodo sertifikası ve Ngix ile de çalıştı. Sadece son sertifika bloğunu en üste ittim. Bu konuyla ilgili ayrıntılı açıklama ve içgörü için teşekkürler.
Andy D

1
Bana yardımcı oluyor! Çok faydalı cevap! Çok teşekkür ederim!
Oleg Klimenko

71
  1. Sertifikanızın ve Anahtarınızın PEM biçiminde olduğundan emin olun. Değilse, openssl komutunu kullanarak bunları dönüştürün
  2. Özel anahtarda bulunanla eşleştiğinden emin olmak için genel anahtarın MD5 karmasını kontrol edin

    openssl x509 -noout -modulus -in certificate.crt | openssl md5
    openssl rsa -noout -modulus -in privateKey.key | openssl md5
    

7
İyi tavsiye ! Peki, md5 karması benim için aynı olsa bile yine de aynı hatayı al ^^
Delphine

4
Karmaların nasıl doğrulanacağını eklediğiniz için teşekkür ederiz. Kopyala yapıştır hatam olduğunu ve pemimin başından itibaren tek bir tire eksik olduğunu öğrendim. Az önce beni birçok baş ağrısından kurtardın. Şerefe.
Justin Fortier

38

Bu sorunu yaşadım çünkü paket ve sertifikayı yanlış sırada ekliyordum, bu yüzden belki bu başka birine yardımcı olabilirdi.

Önce (yanlış olan):

cat ca_bundle.crt certificate.crt > bundle_chained.crt

Sonra (doğru olan)

cat certificate.crt ca_bundle.crt > bundle_chained.crt

Ve lütfen uygun conf'i güncellemeyi unutmayın (ssl_certificate artık zincirli crt'yi göstermelidir)

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

Gönderen nginx man :

Sunucu sertifikası ve paket yanlış sırada birleştirildiyse, nginx başlatılamaz ve şu hata mesajını görüntüler:

SSL_CTX_use_PrivateKey_file(" ... /www.example.com.key") failed
   (SSL: error:0B080074:x509 certificate routines:
    X509_check_private_key:key values mismatch)

3
Bu aslında bu soruya kabul edilenden daha iyi bir cevap.
baldrs

10

Bu olursa ve Let's Encrypt / certbot kullanıyorsanız, bunun nedeni büyük olasılıkla chain.pemyerine kullanmış olmanızdır fullchain.pem.

Bunun gibi bir şey olmalı:

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

Certbot belgelerine bakın "Sertifikalarım nerede?"


Veya paketteki sertifikaların sırası yanlış: önce letsencrypt, sonra kendi sertifikası.
ingopingo

6

Ben de aynı sorunu yaşadım ve sonunda sertifika dosyasındaki pem bloklarının sırasını değiştirerek çözdüm.

Cert bloğu dosyanın başlangıcına, ardından ara bloklara, ardından kök bloğuna yerleştirilmelidir.

Sorunlu bir sertifika dosyasını çalışan bir sertifika dosyasıyla karşılaştırarak bu sorunu fark ettim.


1

Konuyla ilgili 5 sentim:

Aynı problemim vardı. Yaklaşık 1 saat sonra, sertifikayı yanlış yapıştırdığımı fark ettim.

Böyle bir hata ile karşılaşırsanız lütfen sertifikanızı kontrol edin.


1

Benim durumumda SSL sertifikasını değiştirmek istedim çünkü sunucumu değiştirdim ve bu komutla yeni bir CSR oluşturmak zorunda kaldım:

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

Mysite.csr dosyasını şirketin SSL sağlayıcısına gönderdim ve crt sertifikasını aldıktan sonra nginx'i yeniden başlattım ve bu hatayı aldım

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

Çok fazla araştırmadan sonra, hata, anahtar dosyadaki modülün crt dosyasındaki ile aynı olmamasıydı.

Bu yüzden çalışmasını sağlamak için yeni bir csr dosyası oluşturdum ama bu komutla dosyanın adını değiştirmem gerekiyor

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

Sonra şirket sağlayıcısından yeni bir crt dosyası aldım, nginx'i yeniden başlattım ve işe yaradı.


0

Bu, CA'nız bir ara sertifika verdiğinde de olabilir

Bu sorunla (iki kez) nginx ile karşılaştım ve bu yazıdaki çözümlerden hiçbiri sorunu açıklamadı. Marco adında hoş bir beyefendinin yazdığı blog yazısı onu çiviledi ve ben de gördüklerime rastlayan herkes için buraya yapıştırıyorum. https://medium.com/@mrkdsgn/steps-to-install-a-go-daddy-ssl-certificate-on-nginx-on-ubuntu-14-04-ff942b9fd7ff

Benim durumumda, go-daddy CA idi ve bu, sertifikayı ve ara sertifika paketlerini nasıl düzenlediklerine özgüdür.

İşte Marco'nun blog gönderisinden alıntı

Nginx ile, CA'nız bir ara sertifika içeriyorsa, sertifikanızı ve CA'nın ara sertifikalarını içeren tek bir zincirleme sertifika dosyası oluşturmanız gerekir.

Bu komutu, example.com.chained.crt adında birleştirilmiş bir dosya oluşturmak için kullanabilirsiniz:

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


0

Benim durumumda sorun, cli arayüzüne herhangi bir veri girmeden sertifika girmemdi. Sertifikaları yeniden oluşturduğumda ve tüm alanlara girdiğimde: Şehir, Eyalet, vb. Hepsi düzeldi.

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

0

Bundle.crt ve main cert'i birleştirdiğimde başıma geldi. Nedeni, bundle.crt'nin altındaki ana sertifikayı kopyalamamdı. Öbür türlü olmalı

1 / ana sertifika 2 / bundle.crt


0

Nginx için:

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

  2. SSL dosyası domain_com.crtve domain_com.ca-bundledosyaları, ardından yeni dosyayı yapıştırarak kopyalayın domain.com.chained.crt.

3: nginx dosyalarını ekleyin:

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

Lates, Nginx'i yeniden başlatır.


0

SL_CTX_use_PrivateKey ("/ etc / nginx / ssl / file") başarısız oldu (SSL: hata: 0B080074: x509 sertifika rutinleri: X509_check_private_key: anahtar değerleri eşleşmiyor)

Bu hata, sertifika özel anahtarı ( ssl_certificate_keyörneğin .keyveya .pemdosya) ssl_certificateNginx yapılandırmanızdaki (teslim etme nginx.confveya teslim etme ) genel sertifika dosyasıyla ( ) eşleşmediğinde ortaya çıkabilir sites-enabled/. Her iki dosyanın da eşleştiğinden emin olun.

Daha fazla ayrıntı için Nginx hata günlüklerini kontrol edin (örneğin /var/log/nginx/error.log).


0

Benim durumumda, alanımın sertifikalarını birleştirmem gerekiyor.

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

Ve /etc/nginx/nginx.conf yapılandırma dosyasında

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

Hizmeti yeniden başlatın ve her şey tamam.

systemctl restart nginx.service

Kaynak adım 2: https://www.namecheap.com/support/knowledgebase/article.aspx/9781/2238/nginx-ssl-error0b080074x509-certificate-routines-x509checkprivatekeykey-values-mismatch

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.