我刚刚从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");
这对我来说似乎毫无用处......
答案 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);
希望这可以帮助某人,并为他们节省很多时间(对我来说是一整天; - ))