OpenSSL如何验证来自自己CA的证书

6

大家好,感谢您花时间阅读这篇文章。

我需要验证由我的自有CA颁发的证书,我已经拥有了一个证书。如何在Ruby代码中执行等同于openssl的

openssl verify -CAfile

的操作?OpenSSL的RDoc对此并不是很有帮助。我尝试过:

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 )

但我得到了以下错误:

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

我甚至在OpenSSL的Rdoc中找不到“verify”的相关信息,网址为http://www.ruby-doc.org/stdlib/libdoc/openssl/rdoc/index.html

非常感谢您的帮助!

2个回答

8

您需要进行验证

lic.verify(ca.public_key)

除此之外,在此之前您可以通过以下方式验证证书颁发机构:

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

我使用了一个日文帮助页面来获取可用方法列表 :)

(意为:作者在获取可用方法列表时参考了一份日文帮助页面)

2

lic.verify() 只验证由签署 lic 的证书中的密钥。商业根 CA 通常不会直接签署最终用户证书,而是涉及一到两个中间签名证书。

因此,如果 CA -> signer -> user cert,则

lic.verify(signer.public_key)signer.verify(CA.public_key) 将返回 true,但 lic.verify(CA.public_key) 将返回 false。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接