Openssl需要使用CA捆绑文件(中级证书)

时间:2011-10-15 18:09:05

标签: c++ openssl ssl-certificate

我刚刚从Go Daddy购买了SSL证书。 很棒的价格,但它似乎有一个退缩。

似乎需要bundle.crt才能在必须浏览器上正常工作。 我还不确定它是什么,据我所知,它是来自证书颁发机构的中间证书。如我错了请纠正我 所以在我的软件中我有openssl

SSL_CTX_set_default_passwd_cb(SSL_ctx, pem_passwd_cb);
SSL_CTX_use_PrivateKey_file(SSL_ctx, _private_key, SSL_FILETYPE_PEM);
SSL_CTX_use_certificate_file(SSL_ctx, _certificate, SSL_FILETYPE_PEM);
SSL_CTX_use_certificate_chain_file(SSL_ctx, "./ssl_key/bundle.pem");
SSL_CTX_set_session_cache_mode(SSL_ctx,SSL_SESS_CACHE_SERVER|SSL_SESS_CACHE_NO_INTERNAL);
SSL_CTX_set_quiet_shutdown(SSL_ctx, 1);

我得到的错误是:

您没有正确运行init或发生错误。

持续证书(geotrust)我不需要捆绑中间件,我真的迷失在这里。

由于SSL_CTX_use_certificate_chain_file只接受PEM文件,因此我已使用openssl将bundle.crt文件转换为PEM。

有什么想法吗?

谢谢!

编辑1: 显然,中级证书必须位于/ etc / ssl / certs文件夹中。 我把go-daddy的每个中间证书都放在这个文件夹上,但仍然没有运气...... 我删除了这行

SSL_CTX_use_certificate_chain_file(SSL_ctx, "./ssl_key/bundle.pem");

这对我来说似乎毫无用处......

1 个答案:

答案 0 :(得分:3)

好的,在测试了我终于发现的一百万件事之后。

我没有将bundle.crt转换为PEM。 我已将证书文件直接粘贴到bundle.crt(文件开头)

我在代码中删除了这一行:

SSL_CTX_use_certificate_file(SSL_ctx, _certificate, SSL_FILETYPE_PEM);

所以这是SSL init的最终代码:

SSL_CTX_set_default_passwd_cb(SSL_ctx, pem_passwd_cb);
SSL_CTX_use_PrivateKey_file(SSL_ctx, _private_key, SSL_FILETYPE_PEM);
SSL_CTX_use_certificate_chain_file(SSL_ctx, "./ssl_key/bundle.crt");
SSL_CTX_set_session_cache_mode(SSL_ctx,SSL_SESS_CACHE_SERVER|SSL_SESS_CACHE_NO_INTERNAL);
SSL_CTX_set_quiet_shutdown(SSL_ctx, 1);

希望这可以帮助某人,并为他们节省很多时间(对我来说是一整天; - ))