2009-09-21 33 views
33

Ứng dụng của tôi sử dụng SSL để liên lạc an toàn với máy chủ và gặp sự cố khi xác minh chuỗi chứng chỉ. Chuỗi trông như thế này:Gặp sự cố khi hiểu xác minh chuỗi chứng chỉ SSL

Entrust.net Máy Chủ Bảo Mật Certification Authority -> DigiCert toàn cầu CA -> * .ourdomain.com

Chúng tôi đang sử dụng một kho chứng chỉ kéo từ Mozilla. Nó chứa chứng chỉ Entrust.net, nhưng không chứa chứng chỉ DigiCert Global CA.

sự hiểu biết của tôi là một cơ quan trung gian không cần phải được tin cậy miễn là quyền người dùng root, nhưng việc xác minh thất bại:

% openssl verify -CAfile mozilla-root-certs.crt ourdomain.com.crt 
error 20 at 0 depth lookup:unable to get local issuer certificate 

Vì vậy, tôi cần phải tin tưởng một cách rõ ràng CA DigiCert toàn cầu trong đặt hàng để xác minh để vượt qua? Điều đó có vẻ sai. Nhưng bạn nói với tôi!

EDIT: Bây giờ tôi hiểu rằng tệp chứng chỉ cần phải có sẵn cho OpenSSL ở phía trước. Một cái gì đó như thế này hoạt động:

% openssl verify -CAfile mozilla-root-certs.crt -untrusted digicert.crt ourdomain.com.crt 
ourdomain.com.crt: OK 

Điều này cho phép tôi cung cấp một bản sao của DigiCert CA mà không nói rõ ràng "Tôi tin tưởng", toàn bộ chuỗi vẫn cần được xác minh.

Nhưng chắc chắn các trình duyệt như Firefox sẽ không luôn luôn xuất xưởng với một bản sao của mọi chứng chỉ đơn lẻ mà bạn cần. Luôn có các CA mới và vấn đề là sử dụng bảo mật của chứng chỉ gốc để đảm bảo tất cả các CA trung gian đều hợp lệ. Đúng? Vậy làm thế nào hiện tác phẩm này? Nó có thực sự ngớ ngẩn không?

+0

Trên OpenBSD, '-CAfile' có thể được đặt thành'/etc/ssl/cert.pem'. –

Trả lời

16

Các chứng chỉ trung gian phải được cài đặt trên máy chủ web của bạn cũng như các chứng chỉ cho tên miền của riêng bạn. Tôi đã gặp vấn đề tương tự này tuần trước ... Firefox có vẻ là cầu kỳ hơn so với phần còn lại của các trình duyệt về điều này.

+4

Aha ... Được rồi. Cám ơn David. Đối với những người đến đây từ Google, từ khóa để định cấu hình apache là SSLCertificateChainFile. Xem này (từ chính DigiCert!) http://www.digicert.com/ssl-certificate-installation-apache.htm –

+0

Tuyệt vời nhất. Cảm ơn, Josh, điều này đã giúp tôi rất nhiều. – 0xCAFEBABE

6

Dưới đây là cách chính xác để xác minh một certficate đến từ một máy chủ web

  • Khách hàng duy trì một danh sách các chứng chỉ ROOT CA tin cậy
  • Web Server nên trả lại Server Certificate sau - Dòng bắt buộc
  • Chứng chỉ Trung cấp (s) - Bắt buộc ROOT CA Cert - Không bắt buộc/Tùy chọn

Khi khách hàng kết nối với máy chủ, nó sẽ nhận được chứng chỉ máy chủ và intermedia giấy chứng nhận te từ máy chủ. Sau đó khách hàng sẽ xây dựng một chuỗi niềm tin từ chứng chỉ máy chủ, thông qua (các) chứng chỉ trung gian đến một trong các chứng chỉ CA ROOT mà nó tin tưởng. Chứng chỉ ROOT luôn được tự ký - vì vậy đó là nơi chuỗi dừng lại.

Đây là một lệnh đơn giản để kiểm tra một chứng chỉ máy chủ web sử dụng openssl

openssl s_client -CAfile <root ca file> -quiet -showcerts -connect IP:PORT 

Trong trường hợp lưu trữ ảo, nơi mà nhiều chứng chỉ được phục vụ trên cùng một IP: PORT, tên máy chủ chỉ (SNI) có thể được bật sử dụng -servername <FQDN>. Nếu không, chứng chỉ mặc định sẽ được gửi.

Các vấn đề liên quan