为什么OpenSSL的SSL_CTX_load_verify_locations仅读取multi cert.pem文件中的第一个证书

时间:2018-11-20 07:26:12

标签: ssl https openssl ssl-certificate boost-asio

我有一个带有许多证书的PEM文件,格式为:

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

此文件包含我打算通过https连接到我的服务器的证书,并进行验证 使用boost来源中列出的boost ssl验证客户端示例:

Boost1.62/boost_1_62_0/libs/asio/example/cpp03/ssl/client.cpp03/ssl/client

我正在使用load_verify_file调用来加载pem文件。

ctx.load_verify_file("mycerts.pem");

但是验证失败并显示错误:

asio.ssl:336134278 : certificate verify failed

我发现的原因是该程序仅加载上面的pem文件中的第一个证书。 当我手动在pem文件顶部显示服务器的证书时,验证成功。 strace,还告诉您在打开未验证的pem文件时仅读取第一个-----BEGIN CERTIFICATE-----

问题是,根据消息来源,Boost的load_verify_file()函数调用了opensl的​​: SSL_CTX_load_verify_locations()函数,根据定义,该函数应处理所提供的每个证书 多证书.pem文件: 引用openssl doc

  

如果CAfile不为NULL,则它指向PEM中CA证书的文件   格式。该文件可以包含多个由

标识的CA证书。      

----- BEGIN证书----- ...(采用base64编码的CA证书)   ... ----- END CERTIFICATE -----序列。之前,之间和之后   允许使用证书文本,例如对于   证书的说明。

     

在执行以下命令时处理CAfile   SSL_CTX_load_verify_locations()函数。

我似乎不明白我可能会缺少什么。

0 个答案:

没有答案