2009-10-05 19 views

Trả lời

10

Từ nhận xét đến trả lời đầu tiên của tôi Tôi thấy rằng có một sự hiểu lầm chung 'xác minh chứng chỉ có nghĩa là gì'. Tôi sẽ cố gắng viết một lời giải thích ngắn gọn ở đây để loại bỏ một số ảo tưởng.

Xác minh chứng chỉ là về việc kiểm tra chữ ký trên siêu dữ liệu chứng chỉ (ví dụ: chủ đề, khoảng thời gian hiệu lực, tiện ích mở rộng và như vậy) đối với một số chữ ký mã hóa.

Nếu tất cả những gì bạn có để xác thực là chứng chỉ tự ký, bạn không thể phân biệt chứng chỉ này với chứng chỉ tự ký khác có cùng siêu dữ liệu, nhưng khóa khác, trừ khi bạn biết trước khóa của chứng chỉ khóa. Và đừng quên rằng bạn thiết lập tất cả quy trình xác minh này để xóa yêu cầu có kiến ​​thức được chia sẻ trước này. Với xác minh chứng chỉ thông thường, bạn không thể loại bỏ hoàn toàn yêu cầu để có một số kiến ​​thức được chia sẻ trước, đó là một bộ chứng chỉ của bên thứ ba, còn được gọi là 'chứng chỉ CA'. Vì kiến ​​thức này được chia sẻ trước, các chứng chỉ đó có thể được tự ký, nhưng hãy nhớ rằng bạn đã nhận được thông tin về tính hợp lệ của những chứng chỉ đó không phải từ quá trình xác minh, mà từ một số kiến ​​thức bên ngoài.

Khi bạn có một bộ chứng chỉ CA đáng tin cậy được phân phối giữa các đồng nghiệp, bạn có thể sử dụng chúng để ký các chứng chỉ khác và kiểm tra chữ ký chống lại kiến ​​thức được chia sẻ trước đó của CA đáng tin cậy. Nếu bạn không có kiến ​​thức bổ sung về chứng chỉ tự ký trừ bản thân chứng chỉ, bạn có thể không đưa ra giả định về niềm tin vào chứng chỉ cụ thể này, bởi vì nó có thể do một số hacker xấu cấp cũng như bởi máy chủ đáng tin cậy của bạn.

Vui lòng tìm hiểu một số kiến ​​thức về Man in the middle attack, Public key infrastructurePublic key cryptography nói chung trước khi triển khai bất kỳ loại quy trình xác minh chứng chỉ nào.

Hãy hiểu rằng xác minh mù của chứng chỉ tự ký sẽ không bảo vệ bạn ngay cả từ một hacker thông minh trong mạng của riêng bạn, thậm chí không xem xét bảo mật internet nói chung.

Chỉnh sửa: tác giả câu hỏi làm rõ rằng anh ấy đang tìm cách xác minh chữ ký verisign (hoặc CA khác) trên chứng chỉ bằng cách sử dụng liên kết M2Crypto. Dưới đây là hai ví dụ:

from M2Crypto import X509, SSL 

# manual validation of a signature on a certificate using a given CA cert: 
ca = X509.load_cert('/path/to/ca_cert.pem') 
cert = X509.load_cert('certificate_to_validate.pem') 
print "Verification results:", cert.verify(ca.get_pubkey()) 

# adding a given CA cert to the SSL Context for verification 
ctx = SSL.Context() 
# load a certificate from file 
ctx.load_verify_locations(cafile='/path/to/ca_cert.pem') 
# or use all certificate in a CA directory 
ctx.load_verify_locations(capath='/path/to/ca/dir') 
# or you can specify both options at the same time. 

Nếu bạn đang sử dụng một thư mục với nhiều chứng chỉ CA (mà thường là thuận tiện hơn), bạn phải đổi tên mỗi giấy chứng nhận để <hash>.0 nơi <hash> là băm của đối tượng chứng chỉ (thu được với openssl x509 -noout -hash -in cert.pem).

+0

Xin lỗi, câu hỏi của tôi đã sai. – Bhargava

+0

Tôi thực sự đang tìm kiếm xác minh chứng chỉ đã ký bằng chữ ký bằng M2Crypto. – Bhargava

+0

Tôi đã cập nhật câu trả lời bằng các ví dụ về M2Crypto. – abbot

0

Không thể xác minh chứng chỉ tự ký vì bản chất của nó: nó là tự ký.

Bạn phải ký chứng chỉ bởi một số chứng chỉ của bên thứ ba đáng tin cậy khác để có thể xác minh bất kỳ điều gì và sau đó bạn có thể thêm chứng chỉ của bên thứ ba đó vào danh sách CA đáng tin cậy của bạn và sau đó bạn sẽ có thể xác minh chứng chỉ được ký bởi chứng chỉ đó/CA.

Nếu bạn muốn đề xuất về cách thực hiện điều này bằng Python, bạn nên cung cấp tên thư viện SSL bạn đang sử dụng vì có thư viện SSL cho Python.

+0

Tất cả chứng chỉ CA cấp cao nhất được tự ký và không có vấn đề gì khi không xác minh (tin tưởng) chúng. –

+0

tất nhiên bạn có thể xác minh chứng chỉ tự ký, bạn chỉ cần có chứng chỉ được sao chép cục bộ. Về cơ bản, đó là xác thực khóa công khai/riêng tư tại thời điểm đó. Nhiều hệ thống xác thực cục bộ hoạt động theo cách này, xác minh rằng máy chủ là hợp pháp bằng cách sử dụng chứng chỉ x.509. Nhìn vào certmaster và func cho các ví dụ python – JimB

2

Tôi giả sử bạn sử dụng một số ràng buộc OpenSSL. Tôi thấy 2 cách để giải quyết vấn đề của bạn.

  1. Bạn có thể thêm chứng chỉ vào thư mục openssl (chạy openssl version -d để xem nó cho hệ thống của bạn). Điều này sẽ ảnh hưởng đến tất cả các chương trình bằng cách sử dụng openssl trên máy của bạn.
  2. chứng Load và thêm nó run-time (mã phác thảo dưới đây là dành cho PyOpenSSL, nhưng nó phải là tương tự cho các ràng buộc khác):

.

x509 = OpenSSL.crypto.load_certificate(...) 
ctx = OpenSSL.SSL.Context(...) 
store = ctx.get_cert_store() 
store.add_cert(x509) 
ctx.set_verify(VERIFY_PEER | VERIFY_FAIL_IF_NO_PEER_CERT, ...) 
+0

Sử dụng mã này bạn không xác minh chứng chỉ tự ký, bạn rõ ràng đang thêm nó vào kho lưu trữ chứng chỉ tin cậy do đó nó sẽ tự 'xác minh'. Việc thêm chứng chỉ vào thư mục openssl sẽ thực hiện chính xác như vậy. Một lần nữa, không thể xác minh chứng chỉ tự ký: mọi chứng chỉ tự ký sẽ vượt qua bài kiểm tra xác minh của bạn. – abbot

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