2009-03-31 2 views
6

Xin chào tất cả và cảm ơn bạn đã đọc thời gian này.OpenSSL xác minh chứng chỉ từ CA của riêng mình

Tôi cần xác minh chứng chỉ do CA của chính tôi cấp, mà tôi có chứng chỉ . Làm cách nào tôi có thể thực hiện tương đương với openssl's

openssl verify -CAfile

trong mã Ruby? RDoc cho OpenSSL không phải là rất hữu ích trong lĩnh vực này. Tôi đã thử:

 
require 'openssl' 

ca = OpenSSL::X509::Certificate.new(File.read('ca-cert.pem')) 

lic = OpenSSL::X509::Certificate.new(File.read('cert.pem')) 

puts lic.verify(ca) 

nhưng tôi nhận được:

 
test.rb:7:in `verify': wrong argument (OpenSSL::X509::Certificate)! 
(Expected kind of OpenSSL::PKey::PKey) (TypeError) 
    from test.rb:7 

Tôi thậm chí không thể tìm thấy "xác minh" trong rdoc OpenSSL tại http://www.ruby-doc.org/stdlib/libdoc/openssl/rdoc/index.html.

Mọi trợ giúp đều được đánh giá cao. Cảm ơn một lần nữa!

Trả lời

8

Bạn cần phải xác nhận với

lic.verify(ca.public_key) 

ngoài trước khi bạn có thể xác minh giấy chứng nhận tổ chức phát hành với

lic.issuer.to_s == ca.subject.to_s 

tôi đã sử dụng một Japanese help page để có được danh sách các phương pháp có sẵn :)

2

lic.verify() chỉ xác minh khóa từ chứng chỉ đã ký cam kết. Cs gốc Ccommercial không ký trực tiếp chứng chỉ người dùng cuối. Thông thường có một hoặc 2 chứng chỉ ký trung gian có liên quan.

Vì vậy, nếu CA -> signer -> user cert sau đó

lic.verify(signer.public_key)signer.verify(CA.public_key) sẽ trở thành sự thật nhưng lic.verify(CA.public_key) sẽ trả về false.