SSL: błąd: 0B080074: procedury certyfikatu x509: X509_check_private_key: niezgodność wartości kluczy

102

Nie mogę skonfigurować SSL. Wyszukałem w Google i znalazłem kilka rozwiązań, ale żadne z nich nie zadziałało. Potrzebuję pomocy, proszę ...

Oto błąd, który otrzymuję, gdy próbuję ponownie uruchomić 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

Mój certyfikat pochodzi ze StartSSL i jest ważny przez 1 rok.

Oto, co przetestowałem:

  • Certyfikat i klucz prywatny nie mają końcowych spacji.
  • Nie używam domyślnego pliku server.key.
  • Sprawdziłem nginx.conf i dyrektywy wskazują na poprawny klucz prywatny i certyfikat.

Sprawdziłem też moduł i otrzymałem inny moduł dla klucza i certyfikatu.

Dziękuję za pomoc. :)

Galou
źródło

Odpowiedzi:

37

Otrzymałem skrót MD5 z różnymi wynikami dla klucza i certyfikatu.

To mówi wszystko. Wystąpiła niezgodność między kluczem a certyfikatem.

Moduł powinien pasować. Upewnij się, że masz prawidłowy klucz.

dev0z
źródło
O ile czegoś nie brakuje, absolutnie CHCESZ, aby klucze publiczne i prywatne (plik certyfikatu i plik klucza) były inne.
Mark Berry
1
Części modulus' and the publicznego wykładnika w kluczu i certyfikacie muszą być zgodne. Bez wątpienia pliki są różne. Klucz jest generowany dla jednego konkretnego certyfikatu.
dev0z
Mój błąd. Myślałem, że ma na myśli MD5 plików. Widzę teraz, że certyfikaty mają oddzielną funkcję modułu: Jak sprawdzić, czy moduł w Twoim kluczu prywatnym jest zgodny z modułem w kluczu publicznym Twojego certyfikatu SSL / TLS przed instalacją? .
Mark Berry
168

Gdy już ustalisz, że nie pasują, nadal masz problem - co z tym zrobić. Często certyfikat może być po prostu nieprawidłowo złożony. Kiedy urząd certyfikacji podpisuje twój certyfikat, wysyła ci blok, który wygląda podobnie

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

wyślą ci również pakiet (często dwa certyfikaty), które reprezentują ich uprawnienia do wydania certyfikatu. to będzie wyglądać jak

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

poza tym, niestety, nie będą one tak wyraźnie oznaczone.

powszechną praktyką jest więc łączenie ich w jeden plik - certyfikat, a następnie certyfikaty podpisu. Ponieważ jednak niełatwo je rozróżnić, zdarza się, że ktoś przypadkowo układa je w innej kolejności - podpisując certyfikaty, potem ostateczny certyfikat - nie zauważając. W takim przypadku Twój certyfikat nie będzie pasował do Twojego klucza.

Możesz przetestować, co według certyfikatu reprezentuje, uruchamiając

openssl x509 -noout -text -in yourcert.cert

U góry powinieneś zobaczyć „Temat:”, a następnie coś, co wygląda jak Twoje dane. Jeśli zamiast tego wygląda jak Twój urząd certyfikacji, Twój pakiet jest prawdopodobnie w złej kolejności; możesz spróbować wykonać kopię zapasową, a następnie przenieść ostatni certyfikat na początek, mając nadzieję, że to ten, który jest Twoim certyfikatem.

Jeśli to nie zadziała, może być konieczne ponowne wystawienie certyfikatu. Kiedy tworzę CSR, lubię wyraźnie oznaczyć, do jakiego serwera jest przeznaczony (zamiast po prostu ssl.key lub server.key) i zrobić jego kopię z datą w nazwie, np. Mydomain.20150306.key itp. W ten sposób. jest mało prawdopodobne, aby pary kluczy prywatny i publiczny zostały pomieszane z innym zestawem.

Vynce
źródło
1
To naprawiło to dla mnie na Nginx!
TTT
24
Ogromne +1 za pokazanie, jak sprawdzić, co jest w łańcuchu certyfikatów.
cbednarski
Zdecydowanie przydatne, spędziłem godzinę próbując zrozumieć, dlaczego nginx odmawia wydania certyfikatu, podczas gdy widziałem, że zawiera on dane
Jacopofar
3
Ok, zadziałało to również dla mnie z certyfikatem Comodo i Ngix. Właśnie przesunąłem ostatni blok certyfikatów na górę. Dzięki za szczegółowe wyjaśnienie i wgląd w ten problem.
Andy D
1
Pomaga mi! Bardzo przydatna odpowiedź! Dziękuję bardzo!
Oleg Klimenko
71
  1. Upewnij się, że Twój certyfikat i klucz mają format PEM. Jeśli nie, przekonwertuj je za pomocą polecenia openssl
  2. Sprawdź skrót MD5 klucza publicznego, aby upewnić się, że jest zgodny z tym, co znajduje się w kluczu prywatnym

    openssl x509 -noout -modulus -in certificate.crt | openssl md5
    openssl rsa -noout -modulus -in privateKey.key | openssl md5
    
dev0z
źródło
7
Dobra rada ! Cóż, nadal pojawia się ten sam błąd, nawet jeśli hash md5 jest dla mnie taki sam ^^
Delphine
4
Dziękujemy za dołączenie informacji, jak zweryfikować skróty. Dowiedziałem się, że wystąpił błąd kopiowania wklejania i brakowało mi ani jednej kreski na początku mojego pem. Właśnie uratowałeś mi wiele bólów głowy. Twoje zdrowie.
Justin Fortier
38

Miałem ten problem, ponieważ dodawałem pakiet i certyfikat w złej kolejności, więc może to mogłoby pomóc komuś innemu.

Przed (co jest błędne):

cat ca_bundle.crt certificate.crt > bundle_chained.crt

Po (co jest słuszne)

cat certificate.crt ca_bundle.crt > bundle_chained.crt

I proszę, nie zapomnij zaktualizować odpowiedniego ustawienia conf (ssl_certificate musi teraz wskazywać na połączony crt) jako

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

Ze strony podręcznika nginx :

Jeśli certyfikat serwera i pakiet zostały połączone w złej kolejności, nginx nie uruchomi się i wyświetli komunikat o błędzie:

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
źródło
3
W rzeczywistości jest to lepsza odpowiedź na to pytanie niż zaakceptowana.
baldrs
9

Jeśli tak się stanie, a używasz Let's Encrypt / certbot, najprawdopodobniej użyłeś chain.pemzamiastfullchain.pem .

Powinno wyglądać mniej więcej tak:

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

Zobacz dokumentację certbot „Gdzie są moje certyfikaty?”

Marian
źródło
Lub kolejność certyfikatów w pakiecie jest nieprawidłowa: najpierw Let'sencrypt, a następnie własny certyfikat.
ingopingo
5

Miałem ten sam problem i ostatecznie rozwiązałem go, zmieniając kolejność bloków pem w pliku certyfikatu.

Blok certyfikatu należy umieścić na początku pliku, następnie bloki pośrednie, a następnie blok główny.

Zrozumiałem ten problem, porównując problematyczny plik certyfikatu z działającym plikiem certyfikatu.

fuweichin
źródło
1

Moje 5 centów w tej sprawie:

Miałem ten sam problem. Po około 1 godzinie opiekowania się nim stwierdziłem, że wkleiłem certyfikat nieprawidłowo.

Jeśli masz taki błąd, sprawdź swój certyfikat.

Nacięcie
źródło
1

W moim przypadku chciałem zmienić certyfikat SSL, ponieważ zmieniłem serwer, więc musiałem utworzyć nowy CSR za pomocą tego polecenia:

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

Wysłałem plik mysite.csr do firmowego dostawcy SSL i po otrzymaniu certyfikatu crt, a następnie zrestartowałem nginx i mam ten błąd

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

Po wielu badaniach błąd polegał na tym, że moduł z pliku klucza nie był tym samym, co ten z pliku crt

Aby więc działało, utworzyłem nowy plik csr, ale muszę zmienić nazwę pliku za pomocą tego polecenia

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

Następnie otrzymałem nowy plik crt od dostawcy firmy, zrestartowałem nginx i zadziałało.

ryba cytrynowa
źródło
0

Może się to również zdarzyć, gdy urząd certyfikacji wystawia certyfikat pośredni

Natknąłem się na ten problem (dwukrotnie) z nginx i żadne z rozwiązań w tym poście nie wyjaśniło problemu. Wpis na blogu napisany tutaj przez miłego dżentelmena o imieniu Marco dotarł do tego miejsca i wklejam go tutaj dla każdego, kto również napotka to, co widziałem. https://medium.com/@mrkdsgn/steps-to-install-a-go-daddy-ssl-certificate-on-nginx-on-ubuntu-14-04-ff942b9fd7ff

W moim przypadku go-daddy był urzędem certyfikacji i dotyczy to sposobu wydawania certyfikatów i pośrednich pakietów certyfikatów.

Oto fragment wpisu na blogu Marco

W przypadku Nginx, jeśli Twój urząd certyfikacji zawiera certyfikat pośredni, musisz utworzyć pojedynczy łańcuchowy plik certyfikatu, który zawiera Twój certyfikat i certyfikaty pośrednie CA.

Możesz użyć tego polecenia, aby utworzyć połączony plik o nazwie example.com.chained.crt:

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

Shyam Habarakada
źródło
0

W moim przypadku problem polegał na tym, że tworzyłem certyfikaty bez wprowadzania danych w interfejsie CLI. Kiedy odrodziłem kretyfikaty i wszedłem na wszystkie pola: miasto, stan itp., Wszystko było w porządku.

 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
źródło
0

Zdarzyło mi się to, gdy połączyłem pakiet bundle.crt i główny cert. Powodem było skopiowanie głównego certyfikatu poniżej pliku bundle.crt. Powinno być na odwrót

1 / główny cert 2 / bundle.crt

Kryszna
źródło
0

Dla Nginx:

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

  2. Plik domain_com.crti domain_com.ca-bundlepliki SSL, a następnie skopiuj nowy plik wklej domain.com.chained.crt.

3: Dodaj pliki nginx:

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

Późny restart Nginx.

elektrokoder
źródło
0

SL_CTX_use_PrivateKey ("/ etc / nginx / ssl / file") nie powiodło się (SSL: błąd: 0B080074: procedury certyfikacji x509: X509_check_private_key: niezgodność wartości kluczy)

Ten błąd może się zdarzyć, gdy klucz prywatny certyfikatu ( ssl_certificate_keynp. .keyLub .pemplik) nie pasuje do pliku certyfikatu publicznego ( ssl_certificate) w konfiguracji Nginx (sprawdź nginx.conflub wsites-enabled/ ). Upewnij się, że oba pliki są zgodne.

Sprawdź dzienniki błędów Nginx, aby uzyskać dalsze szczegóły (np /var/log/nginx/error.log.).

kenorb
źródło
0

W moim przypadku muszę połączyć certyfikaty mojej domeny.

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

Oraz w pliku konfiguracyjnym /etc/nginx/nginx.conf

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

Uruchom ponownie usługę i wszystko w porządku.

systemctl restart nginx.service

Krok 2 źródła: https://www.namecheap.com/support/knowledgebase/article.aspx/9781/2238/nginx-ssl-error0b080074x509-certificate-routines-x509checkprivatekeykey-values-mismatch

mariofertc
źródło