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


102

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를 확인했고 지시문이 올바른 개인 키와 인증서를 가리키고 있습니다.

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

도와 주셔서 감사합니다. :)

답변:


37

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

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

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


내가 뭔가를 놓친 것이 아니라면, 당신은 절대적으로 공개 키와 개인 키 (인증서 파일과 키 파일)가 다르기를 원합니다.
Mark Berry

1
modulus' and the 키와 인증서 의 공개 지수 부분이 일치해야합니다. 의심 할 여지없이 파일이 다릅니다. 하나의 특정 인증서에 대해 키가 생성됩니다.
dev0z

내 잘못이야. 나는 그가 파일의 MD5를 언급하고 있다고 생각했습니다. 이제 인증서에 별도의 모듈러스 기능이 있음을 알 수 있습니다. 설치 전에 개인 키의 모듈러스가 SSL / TLS 인증서의 공개 키의 모듈러스와 일치하는지 확인하는 방법은 무엇입니까? .
Mark Berry

168

일치하지 않는다는 것을 확인한 후에도 여전히 문제가 있습니다. 종종 인증서가 잘못 조립 될 수 있습니다. 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
이것은 Nginx에서 나를 위해 수정했습니다!
TTT

24
인증서 체인에 무엇이 있는지 확인하는 방법을 보여주는 엄청난 +1입니다.
cbednarski 2015

확실히 유용, 내가 Nginx에 인증서를 거부하는 이유를 나는 그것이 데이터를 포함 볼 수있는 동안 이해하려고 한 시간 보낼
Jacopofar

3
Ok, 이것은 Comodo cert와 Ngix에서도 저에게 효과적이었습니다. 마지막 인증서 블록을 맨 위로 밀었습니다. 이 문제에 대한 자세한 설명과 통찰력을 위해 Thx.
Andy D

1
그것은 나에게 도움이됩니다! 매우 유용한 답변입니다! 정말 고맙습니다!
Oleg Klimenko 2017

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

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

7
좋은 조언 ! 글쎄, md5 해시가 나에게 동일하더라도 여전히 같은 오류가 발생합니다 ^^
Delphine

4
해시 확인 방법을 포함 해 주셔서 감사합니다. 복사 붙여 넣기 오류가 있고 내 pem의 시작 부분에서 단일 대시가 누락되었음을 알았습니다. 당신은 저에게 많은 두통을 구했습니다. 건배.
Justin Fortier 2016 년

38

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

이전 (잘못된) :

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)

3
이것은 실제로 받아 들여진 질문보다 더 나은 대답입니다.
baldrs

9

이런 일이 발생하고하자 암호화 / 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 문서 "내 인증서는 어디에 있습니까?"를 참조하십시오.


또는 번들의 인증서 순서가 잘못되었습니다. 먼저 letsencrypt, 그 다음에는 자체 인증서가 있습니다.
ingopingo

5

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

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

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


1

문제에 대한 나의 5 센트 :

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

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


1

제 경우에는 서버를 변경했기 때문에 SSL 인증서를 변경하고 싶었습니다. 따라서 다음 명령으로 새 CSR을 만들어야했습니다.

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

mysite.csr 파일을 회사 SSL 공급자에게 보냈고 인증서 crt를받은 후 nginx를 다시 시작했는데이 오류가 발생했습니다.

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

많은 조사 끝에 키 파일의 모듈이 crt 파일의 모듈과 동일하지 않다는 오류가 발생했습니다.

그래서 작동하기 위해 새 csr 파일을 만들었지 만이 명령으로 파일 이름을 변경해야합니다.

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

그런 다음 회사 공급자로부터 새 crt 파일을 받고 nginx를 다시 시작하면 작동했습니다.


0

이는 CA가 중간 인증서를 발급 할 때도 발생할 수 있습니다.

나는 nginx 로이 문제를 (두 번) 만났고이 게시물의 해결책 중 어느 것도 문제를 설명하지 못했습니다. 여기에 Marco라는 멋진 신사의 블로그 게시물이 그것을 못 박았 고, 내가보고있는 것을 마주 치는 모든 사람들을 위해 여기에 붙여 넣었습니다. https://medium.com/@mrkdsgn/steps-to-install-a-go-daddy-ssl-certificate-on-nginx-on-ubuntu-14-04-ff942b9fd7ff

제 경우에는 go-daddy가 CA였으며 이것은 인증서 및 중간 인증서 번들을 발행하는 방법에 따라 다릅니다.

다음은 Marco의 블로그 게시물에서 발췌 한 것입니다.

Nginx를 사용하면 CA에 중간 인증서가 포함 된 경우 인증서와 CA의 중간 인증서가 포함 된 단일 체인 인증서 파일을 만들어야합니다.

이 명령을 사용하여 example.com.chained.crt라는 결합 된 파일을 만들 수 있습니다.

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


0

내 경우 문제는 cli 인터페이스에 데이터를 입력하지 않고 sertificates를 만드는 것입니다. 내가 화장터를 재생하고 모든 밭을 꿰 뚫었을 때 : 도시, 주 등 모든 것이 괜찮아졌습니다.

 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와 main cert를 결합했을 때 나에게 일어났습니다. 그 이유는 bundle.crt 아래에 기본 인증서를 복사했기 때문입니다. 반대 방향이어야합니다.

1 / 기본 인증서 2 / bundle.crt


0

Nginx의 경우 :

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

  2. SSL 파일 domain_com.crtdomain_com.ca-bundle파일을 복사 한 다음 새 파일을 붙여 넣습니다 domain.com.chained.crt.

3 : nginx 파일 추가 :

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

Lates는 Nginx를 다시 시작합니다.


0

SL_CTX_use_PrivateKey ( "/ etc / nginx / ssl / file") 실패 (SSL : 오류 : 0B080074 : x509 인증서 루틴 : X509_check_private_key : 키 값 불일치)

이 오류는 인증서 개인 키 ( ssl_certificate_key, 예 : .key또는 .pem파일)가 ssl_certificateNginx 구성 (체크 nginx.conf또는에서 sites-enabled/) 의 공개 인증서 파일 ( ) 과 일치하지 않을 때 발생할 수 있습니다 . 두 파일이 일치하는지 확인하십시오.

자세한 내용은 Nginx 오류 로그를 확인하십시오 (예 :) /var/log/nginx/error.log.


0

제 경우에는 도메인의 인증서를 연결해야합니다.

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

그리고 설정 파일 /etc/nginx/nginx.conf

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

서비스를 다시 시작하고 모두 확인하십시오.

systemctl restart nginx.service

소스 2 단계 : https://www.namecheap.com/support/knowledgebase/article.aspx/9781/2238/nginx-ssl-error0b080074x509-certificate-routines-x509checkprivatekeykey-values-mismatch

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.