Tại sao tôi không thể xác minh chuỗi chứng chỉ này?


16

Tôi có ba chứng chỉ trong một chuỗi:

  • root.pem
  • trung gian.pem
  • john.pem

Khi tôi kiểm tra chúng bằng cách sử dụng openssl x509 -in [filename] -text -nooutchúng trông ổn, root.pem trông giống như tự ký (Issuer == Chủ đề) và Chủ đề của mỗi chứng chỉ là Nhà phát hành của người tiếp theo, như mong đợi.

Và thực sự tôi có thể xác minh chuỗi lên đến chứng chỉ trung gian:

$ openssl verify -CAfile root.pem root.pem
root.pem: OK
$ openssl verify -CAfile root.pem intermediate.pem
intermediate.pem: OK

Tuy nhiên, john.pem không thành công:

$ openssl verify -CAfile root.pem -CAfile intermediate.pem john.pem
john.pem: C = CL, [...redacted data...]
error 2 at 1 depth lookup:unable to get issuer certificate

Theo hiểu biết tốt nhất của tôi, điều này có nghĩa là openssl không thể tìm thấy công ty phát hành cho trung gian.pem. Điều này không có ý nghĩa gì vì root.pem thực sự là nhà phát hành cho middle.pem.

Tôi đang thiếu gì?


Chỉnh sửa: Ban đầu tôi đã đăng một câu trả lời nói rằng root.pem và trung gian.pem nên được nối trong một tệp, và sau đó người ta nên sử dụng tệp này làm tham số cho -CAfile. Đây là SAU, bởi vì điều này hoàn toàn tin tưởng trung gian.pem, như Johannes Pille chỉ ra. Đọc liên kết anh ấy đăng trong câu trả lời đã bị xóa của tôi: https://mail.python.org/pipermail/cryptography-dev/2016-August/000676.html


Hãy xóa câu trả lời của bạn, đó là thông tin sai lệch nguy hiểm!
Julian Pille

1
@JohannesPille Xong, cảm ơn bạn về thông tin
Jong Bor

Kudos cho thực sự làm điều đó và phản ứng nhanh chóng.
Julian Pille

Câu trả lời:


14

Bạn không cần phải ghép hai chứng chỉ lại với nhau để xác minh chúng.

Nếu bạn có ba chứng chỉ sau:

  • root.pem - lưu trữ một chứng chỉ tự ký.
  • trung gian.pem - lưu trữ một chứng chỉ được ký bởi root.pem
  • john.pem - lưu trữ một chứng chỉ được ký bởi trung gian.pem

Và bạn chỉ tin tưởng root.pem, sau đó bạn sẽ xác minh john.pembằng lệnh sau:

openssl verify -CAfile root.pem -untrusted intermediate.pem john.pem

Nó bạn có nhiều trung gian, bạn chỉ cần chuỗi -untrusted intermediate2.pem -untrusted intermediate3.pem ...


Điều này. Là câu trả lời đúng duy nhất.
Julian Pille

Tôi nghĩ rằng nếu tôi có cả Chứng chỉ Trung cấp và Root CA trong gói opensslthì sẽ chọn chúng và xác minh chứng chỉ. Có một lý do điều này sẽ xảy ra? Giống như, người đã ký chứng chỉ người dùng đã không ký với Người trung gian nhưng gốc, hay cái gì đó?
FilBot3

Câu cuối cùng của câu trả lời này là sai. Nếu bạn có nhiều trung gian, bạn cần ghép chúng thành một tệp trung gian sau đó sử dụng untrustedcờ một lần. Sử dụng cờ không tin cậy nhiều lần không hoạt động.
AjaxLeung

1
@AjaxLeung - cả hai -untrustedtùy chọn (theo bất kỳ thứ tự nào) hoặc một -untrustedtùy chọn duy nhất trỏ đến một bó các sản phẩm trung gian (nối theo bất kỳ thứ tự nào) đều hoạt động. Đây là phiên bản OpenSSL 1.1.1c trên Ubuntu.
garethTheRed

Vâng, tôi đã nhầm. Tôi nghĩ rằng tôi đã không sử dụng đúng các tập tin tại thời điểm tôi viết bình luận.
AjaxLeung

3

những gì @antiduh nói chỉ hoạt động đối với trường hợp chứng chỉ trung gian duy nhất đối với tôi. Bằng cách thêm nhiều hơn một -untrusted intermediate.pemtrong lệnh dường như không hoạt động. Không chắc chắn là nó có liên quan đến phiên bản openssl cụ thể.

Theo tài liệu openssl: [ https://linux.die.net/man/1/verify]

tập tin tin cậy

Một tập tin chứng chỉ không đáng tin cậy. Các tập tin nên chứa nhiều chứng chỉ

Trong trường hợp của tôi, tôi có một chuỗi như: root.pem -> intermediate1.pem -> intermediate2.pem -> john.pem

bởi cat trung cấp1.pem & trung gian2.pem vào một tệp trung gian chain.pem và sau đó chạy openssl verify -CAfile root.pem -untrusted intermediate-chain.pem john.pemhoạt động cho tôi.

Cũng có vẻ như phần mở rộng trong ca bạn cần đặt basicConstraints = CA:truenếu không tôi vẫn gặp lỗi báo cáo xác thực openssl.

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.