[ssl] SSL : 오류 : 0B080074 : x509 인증서 루틴 : X509_check_private_key : 키 값 불일치

SSL을 설정할 수 없습니다. 나는 구글을 검색했고 몇 가지 해결책을 찾았지만 그들 중 어느 것도 나를 위해 일하지 않았습니다. 도움이 필요 해요 …

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

내 인증서는 StartSSL에서 가져온 것이며 1 년 동안 유효합니다.

내가 테스트 한 내용은 다음과 같습니다.

  • 인증서와 개인 키에는 뒤에 공백이 없습니다.
  • 기본 server.key 파일을 사용하지 않습니다.
  • nginx.conf를 확인했고 지시문이 올바른 개인 키와 인증서를 가리키고 있습니다.

또한 모듈러스를 확인했고 키와 인증서에 대해 다른 모듈러스를 얻었습니다.

도와 주셔서 감사합니다. 🙂



답변

키와 인증서에 대해 다른 결과를 가진 MD5 해시가 있습니다.

이것은 모든 것을 말합니다. 키와 인증서가 일치하지 않습니다.

계수가 일치해야합니다. 올바른 키가 있는지 확인하십시오.


답변

일치하지 않는다는 것을 확인한 후에도 여전히 문제가 있습니다. 종종 인증서가 잘못 조립 될 수 있습니다. CA가 인증서에 서명하면 다음과 같은 블록을 보냅니다.

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

또한 인증서를 부여 할 수있는 권한을 나타내는 번들 (종종 두 개의 인증서)을 보냅니다. 이것은 다음과 같이 보일 것입니다

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

안타깝게도 레이블이 명확하게 표시되지는 않습니다.

일반적인 관행은이 모든 것을 하나의 파일 (인증서, 서명 인증서)로 묶는 것입니다. 그러나 그들은 쉽게 구별되지 않기 때문에 누군가가 실수로 모르는 사이에 실수로 인증서에 서명 한 다음 최종 인증서에 다른 순서로 배치하는 경우가 있습니다. 이 경우 인증서는 키와 일치하지 않습니다.

다음을 실행하여 인증서가 무엇을 나타내는 지 테스트 할 수 있습니다.

openssl x509 -noout -text -in yourcert.cert

상단에 ‘제목 :’이 표시되고 데이터와 유사한 항목이 표시됩니다. 대신 CA처럼 보이면 번들 순서가 잘못되었을 수 있습니다. 백업을 만든 다음 마지막 인증서가 자신의 인증서가되기를 바라면서 처음으로 이동할 수 있습니다.

이것이 작동하지 않으면 인증서를 재발급 받아야 할 수도 있습니다. CSR을 만들 때 ssl.key 또는 server.key 대신에 어떤 서버용인지 명확하게 레이블을 지정하고 mydomain.20150306.key 등과 같이 이름에 날짜가 포함 된 복사본을 만드는 것을 좋아합니다. 개인 및 공개 키 쌍은 다른 세트와 혼동 될 가능성이 낮습니다.


답변

  1. 인증서와 키가 PEM 형식인지 확인하십시오. 그렇지 않은 경우 openssl 명령을 사용하여 변환하십시오.
  2. 공개 키의 MD5 해시를 확인하여 개인 키에있는 것과 일치하는지 확인하십시오.

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


답변

번들과 인증서를 잘못된 순서로 추가했기 때문에이 문제가 발생하여 다른 사람에게 도움이 될 수 있습니다.

이전 (잘못된) :

cat ca_bundle.crt certificate.crt > bundle_chained.crt

이후 (맞습니다)

cat certificate.crt ca_bundle.crt > bundle_chained.crt

그리고 적절한 conf를 업데이트하는 것을 잊지 마십시오 (ssl_certificate는 이제 연결 crt를 가리켜 야합니다).

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

보내는 사람 의 nginx 맨 :

서버 인증서와 번들이 잘못된 순서로 연결되면 nginx가 시작되지 않고 오류 메시지가 표시됩니다.

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


답변

이런 일이 발생하고하자 암호화 / certbot를 사용하는 경우, 그 이유는 가장 가능성이 당신이 사용하는 것입니다 chain.pem대신 fullchain.pem.

다음과 같아야합니다.

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

certbot 문서 “내 인증서는 어디에 있습니까?”를 참조하십시오.


답변

나는 동일한 문제가 있었고 마침내 인증서 파일에서 pem 블록의 순서를 변경하여 해결했습니다.

cert 블록은 파일의 시작 부분, 중간 블록, 루트 블록 순으로 배치해야합니다.

문제가있는 인증서 파일을 작동중인 인증서 파일과 비교하여이 문제를 깨달았습니다.


답변

문제에 대한 나의 5 센트 :

나는 같은 문제가 있었다. 1 시간 정도 관리 한 후 인증서를 잘못 붙여 넣었습니다.

이와 같은 오류가 발생하면 인증서를 확인하십시오.