SSL: lỗi: 0B080074: quy trình chứng chỉ x509: X509_check_private_key: giá trị khóa không khớp


99

Tôi không thể thiết lập SSL. Tôi đã lên Google và tìm thấy một số giải pháp nhưng không có giải pháp nào phù hợp với tôi. Tôi cần một số giúp đỡ xin vui lòng...

Đây là lỗi tôi gặp phải khi cố khởi động lại 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

Chứng chỉ của tôi là của StartSSL và có giá trị trong vòng 1 năm.

Đây là những gì tôi đã thử nghiệm:

  • Chứng chỉ và khóa cá nhân không có dấu cách ở cuối.
  • Tôi không sử dụng tệp server.key mặc định.
  • Tôi đã kiểm tra nginx.conf và các chỉ thị đang trỏ đến khóa cá nhân và chứng chỉ chính xác.

Tôi cũng đã kiểm tra mô-đun và nhận được một mô-đun khác cho cả khóa và chứng chỉ.

Cảm ơn sự giúp đỡ của bạn. :)

Câu trả lời:


36

Tôi nhận được mã băm MD5 với các kết quả khác nhau cho cả khóa và chứng chỉ.

Cái đó đã nói lên tất cả. Bạn không khớp giữa khóa và chứng chỉ của mình.

Mô-đun phải phù hợp. Đảm bảo rằng bạn có đúng chìa khóa.


Trừ khi tôi thiếu thứ gì đó, bạn hoàn toàn MUỐN các khóa công khai và riêng tư (tệp chứng chỉ và tệp khóa) khác nhau.
Mark Berry

1
Các modulus' and the phần số mũ công khai 'trong khóa và Chứng chỉ phải khớp nhau. Không nghi ngờ gì các tệp khác nhau. Khóa được tạo cho một chứng chỉ cụ thể.
dev0z

Lỗi của tôi. Tôi nghĩ rằng anh ấy đang đề cập đến MD5 của các tệp. Bây giờ tôi thấy rằng các chứng chỉ có một chức năng mô-đun riêng biệt: Làm thế nào để xác nhận rằng mô-đun trong khóa cá nhân của bạn khớp với mô-đun trong khóa công khai của chứng chỉ SSL / TLS của bạn trước khi cài đặt? .
Mark Berry

165

Một khi bạn đã xác định rằng chúng không khớp, bạn vẫn có một vấn đề - phải làm gì với nó. Thông thường, chứng chỉ có thể được lắp ráp không chính xác. Khi CA ký chứng chỉ của bạn, họ sẽ gửi cho bạn một khối trông giống như

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

họ cũng sẽ gửi cho bạn một gói (thường là hai chứng chỉ) thể hiện thẩm quyền cấp chứng chỉ cho bạn. cái này sẽ trông giống như

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

ngoại trừ điều không may là chúng sẽ không được dán nhãn rõ ràng như vậy.

sau đó, một thực tiễn phổ biến là gộp tất cả những thứ này lại thành một tệp - chứng chỉ của bạn, sau đó là chứng chỉ ký. Nhưng vì chúng không dễ dàng phân biệt, nên đôi khi có người vô tình đặt chúng theo thứ tự khác - ký xác nhận, sau đó là chứng chỉ cuối cùng - mà không nhận thấy. Trong trường hợp đó, chứng chỉ của bạn sẽ không khớp với khóa của bạn.

Bạn có thể kiểm tra để xem điều gì chứng chỉ cho rằng nó đại diện bằng cách chạy

openssl x509 -noout -text -in yourcert.cert

Ở gần trên cùng, bạn sẽ thấy "Chủ đề:" và sau đó là nội dung giống như dữ liệu của bạn. Nếu thay vào đó, nó trông giống như CA của bạn, gói của bạn có thể không đúng thứ tự; bạn có thể thử tạo một bản sao lưu, sau đó di chuyển chứng chỉ cuối cùng về đầu, hy vọng rằng đó là chứng chỉ là chứng chỉ của bạn.

Nếu điều này không hiệu quả, bạn có thể phải yêu cầu cấp lại chứng chỉ. Khi tôi tạo CSR, tôi muốn gắn nhãn rõ ràng máy chủ đó dùng để làm gì (thay vì chỉ ssl.key hoặc server.key) và tạo một bản sao của nó với ngày trong tên, như mydomain.20150306.key, v.v. theo cách đó. chúng các cặp khóa riêng tư và công khai khó có thể bị trộn lẫn với một bộ khóa khác.


1
Điều này đã sửa nó cho tôi trên Nginx!
TTT

24
+1 lớn để hiển thị cách xem những gì trong chuỗi chứng chỉ.
cbednarski

Chắc chắn hữu ích, tôi dành một giờ để cố gắng tìm hiểu lý do tại sao nginx từ chối chứng chỉ trong khi tôi có thể thấy nó chứa dữ liệu
Jacopofar

3
Ok, điều này cũng hoạt động với tôi với chứng chỉ Comodo và Ngix. Vừa đẩy khối cert cuối cùng lên trên cùng. Thx để được giải thích chi tiết và cái nhìn sâu sắc về vấn đề này.
Andy D

1
Nó giúp tôi! Câu trả lời rất hữu ích! Cảm ơn bạn rất nhiều!
Oleg Klimenko

70
  1. Đảm bảo rằng chứng chỉ và Khóa của bạn có định dạng PEM. Nếu không, hãy chuyển đổi chúng bằng lệnh openssl
  2. Kiểm tra băm MD5 của khóa công khai để đảm bảo rằng nó khớp với những gì có trong khóa riêng tư

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

7
Lời khuyên tốt ! Chà, vẫn gặp lỗi tương tự ngay cả khi băm md5 giống nhau đối với tôi ^^
Delphine

4
Cảm ơn bạn đã bao gồm cách xác minh các băm. Tôi phát hiện ra rằng tôi đã gặp lỗi sao chép dán và thiếu một dấu gạch ngang từ đầu pem của tôi. Bạn chỉ cần cứu tôi rất nhiều đau đầu. Chúc mừng.
Justin Fortier

38

Tôi gặp sự cố này vì tôi đã thêm gói và chứng chỉ không đúng thứ tự nên có thể điều này có thể giúp ích cho người khác.

Trước (sai):

cat ca_bundle.crt certificate.crt > bundle_chained.crt

Sau (đúng)

cat certificate.crt ca_bundle.crt > bundle_chained.crt

Và Xin đừng quên cập nhật conf phù hợp (ssl_certificate bây giờ phải trỏ đến crt chuỗi) như

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

Từ manpage nginx :

Nếu chứng chỉ máy chủ và gói được ghép theo thứ tự sai, nginx sẽ không khởi động được và sẽ hiển thị thông báo lỗi:

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

3
Đây thực sự là một câu trả lời tốt hơn cho câu hỏi đó hơn là câu trả lời được chấp nhận.
hói đầu

9

Nếu điều này xảy ra và bạn đang sử dụng Let's Encrypt / certbot, rất có thể lý do là bạn đã sử dụng chain.pemthay thế fullchain.pem.

Nó phải là một cái gì đó như thế này:

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

Xem tài liệu certbot “Chứng chỉ của tôi ở đâu?”


Hoặc thứ tự của các chứng chỉ trong gói bị sai: đầu tiên là letsencrypt, sau đó là cert của riêng.
ingopingo

5

Tôi đã gặp vấn đề tương tự và cuối cùng đã giải quyết nó bằng cách thay đổi thứ tự của các khối pem trong tệp chứng chỉ.

Khối cert nên được đặt ở đầu tệp, sau đó là khối trung gian, sau đó là khối gốc.

Tôi nhận ra vấn đề này bằng cách so sánh tệp chứng chỉ có vấn đề với tệp chứng chỉ đang hoạt động.


1

5 xu của tôi về vấn đề:

Tôi đã có cùng một vấn đề. Sau khoảng 1 giờ chăm sóc, tôi phát hiện mình đã dán giấy chứng nhận không đúng.

Nếu bạn gặp lỗi như thế này, vui lòng kiểm tra chứng chỉ của bạn.


1

Trong trường hợp của tôi, tôi muốn thay đổi chứng chỉ SSL, vì tôi đã thay đổi máy chủ của mình nên tôi phải tạo CSR mới bằng lệnh này:

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

Tôi đã gửi tệp mysite.csr đến nhà cung cấp SSL của công ty và sau khi tôi nhận được chứng chỉ crt và sau đó tôi khởi động lại nginx và tôi đã gặp lỗi này

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

Sau nhiều lần điều tra, lỗi là mô-đun từ tệp khóa không giống với mô-đun từ tệp crt

Vì vậy, để làm cho nó hoạt động, tôi đã tạo một tệp csr mới nhưng tôi phải thay đổi tên của tệp bằng lệnh này

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

Sau đó, tôi đã nhận được tệp crt mới từ nhà cung cấp của công ty, khởi động lại nginx và nó hoạt động.


0

Điều này cũng có thể xảy ra khi CA của bạn phát hành chứng chỉ trung gian

Tôi đã gặp sự cố này (hai lần) với nginx và không có giải pháp nào trong bài đăng này giải thích sự cố. Bài đăng trên blog ở đây của một quý ông tốt bụng tên là Marco đã đóng đinh nó, và tôi sẽ dán nó ở đây cho bất kỳ ai cũng bắt gặp những gì tôi đang thấy. https://medium.com/@mrkdsgn/steps-to-install-a-go-daddy-ssl-certificate-on-nginx-on-ubuntu-14-04-ff942b9fd7ff

Trong trường hợp của tôi, go-daddy là CA và điều này là cụ thể cho cách họ phát hành chứng chỉ và các gói chứng chỉ trung gian.

Đây là đoạn trích từ bài đăng trên blog của Marco

Với Nginx, nếu CA của bạn bao gồm chứng chỉ trung gian, bạn phải tạo một tệp chứng chỉ chuỗi đơn có chứa chứng chỉ của bạn và các chứng chỉ trung gian của CA.

Bạn có thể sử dụng lệnh này để tạo tệp kết hợp có tên example.com.chained.crt:

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


0

Tôi là trường hợp của tôi, vấn đề là tôi tạo các dịch vụ mà không nhập bất kỳ dữ liệu nào vào giao diện cli. Khi tôi tạo lại các công trình và thay đổi tất cả các trường: Thành phố, Tiểu bang, v.v., tất cả đều trở nên ổn.

 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

Điều đó đã xảy ra với tôi khi tôi kết hợp gói.crt và cert chính. Lý do là tôi đã sao chép chứng chỉ chính bên dưới bó.crt. Nó phải theo cách khác

1 / cert chính 2 / bundle.crt


0

Đối với Nginx:

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

  2. Tệp SSL domain_com.crtdomain_com.ca-bundlecác tệp, sau đó sao chép tệp mới ở dạng dán domain.com.chained.crt.

3: Thêm tệp nginx:

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

Lates khởi động lại Nginx.


0

SL_CTX_use_PrivateKey ("/ etc / nginx / ssl / file") không thành công (SSL: lỗi: 0B080074: quy trình chứng chỉ x509: X509_check_private_key: giá trị khóa không khớp)

Lỗi này có thể xảy ra khi khóa riêng của chứng chỉ ( ssl_certificate_keyví dụ: .keyhoặc .pemtệp) không khớp với tệp chứng chỉ công khai ( ssl_certificate) trong cấu hình Nginx của bạn (kiểm tra nginx.confhoặc đăng ký sites-enabled/). Đảm bảo rằng cả hai tệp đều khớp.

Kiểm tra nhật ký lỗi Nginx để biết thêm chi tiết (ví dụ /var/log/nginx/error.log:).


0

Trong trường hợp của tôi, tôi phải nối các chứng chỉ của miền của mình.

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

Và trong tệp cấu hình /etc/nginx/nginx.conf

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

Khởi động lại dịch vụ và tất cả đều ổn.

systemctl restart nginx.service

Nguồn bước 2: https://www.namecheap.com/support/knowledgebase/article.aspx/9781/2238/nginx-ssl-error0b080074x509-certificate-routines-x509checkprivatekeykey-values-mismatch

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.