为什么我在CentOS上遇到ca-bundle.trust.crt的asn1错误?

时间:2014-12-17 22:49:53

标签: ruby openssl centos ssl-certificate

我正在尝试使用以下代码将/etc/pki/tls/certs中的所有pem和crt文件添加到OpenSSL::X509::Store

require 'openssl'

store = OpenSSL::X509::Store.new
Dir.glob('/etc/pki/tls/certs/*.{pem,crt}') do |cert_path|
  puts cert_path
  cert = OpenSSL::X509::Certificate.new(IO.read(cert_path))
  store.add_cert(cert)
end

当它到达/etc/pki/tls/certs/ca-bundle.trust.crt时,OpenSSL::X509::Certificate.new会引发此错误:

cert_test.rb:6:in `initialize': nested asn1 error (OpenSSL::X509::CertificateError)
    from cert_test.rb:6:in `new'
    from cert_test.rb:6:in `block in <main>'
    from cert_test.rb:4:in `glob'
    from cert_test.rb:4:in `<main>'

任何人都知道ca-bundle.trust.crt是什么或为什么ruby的openssl无法读取它?

对于它的价值,我在运行时不会出现任何错误:

openssl x509 -text -in /etc/pki/tls/certs/ca-bundle.trust.crt

1 个答案:

答案 0 :(得分:0)

这是一组&#34;受信任的证书&#34;。

x509手册页介绍了一些。

  

TRUST SETTINGS

     

请注意,这些选项目前是实验性的,可能会有所改变。

     

可信证书是普通证书,附有若干附加信息,例如证书的允许和禁止使用以及&#34;别名&#34;。

     

通常,在验证证书时,至少有一个证书必须是“受信任的”#34;。默认情况下,受信任的证书必须存储在本地,并且必须是根CA.任何以此CA结尾的证书链都可用于任何目的。

     

信任设置目前仅用于根CA.它们允许更好地控制根CA可用于的目的。例如,CA可能对SSL客户端而不是SSL服务器使用。

     

有关信任设置含义的更多信息,请参阅验证实用程序的说明。

     

OpenSSL的未来版本将识别任何证书上的信任设置:不仅仅是根CA.

  

PEM格式使用页眉和页脚行:

     

----- BEGIN CERTIFICATE -----

     

----- END CERTIFICATE -----

     

它还将处理包含以下内容的文件:

     

----- BEGIN X509 CERTIFICATE -----

     

----- END X509 CERTIFICATE -----

     

受信任的证书具有

行      

-----开始信赖的证书-----

     

----- END TRUSTED CERTIFICATE -----