在c中使用OpenSSL库,将完整的证书链从PEM文件加载到内存的最佳方法是什么?输入是单个PEM文件,其中连接了1..n个证书,输出应为STACK_OF(X509)*
。
对于单个证书,加载它们的最简单方法如下:
SSL_CTX *sslctx = SSL_CTX_new(SSLv23_server_method());
SSL_CTX_use_certificate_file(sslctx, "certificate.pem", SSL_FILETYPE_PEM);
SSL *ssl = SSL_new(sslctx);
X509 *crt = SSL_get_certificate(ssl);
(为了清楚起见,省略了错误处理,资源释放和引用计数;使用C99语法;“easy”意思是“避免使用较低级别的BIO和ASN.1 API”)
但是,对于完整的证书链,可以使用SSL_CTX_use_certificate_chain_file()
将它们加载到SSL_CTX
中,然后可以使用SSL_get_certificate()
检索第一个证书,但似乎没有SSL
{3}}从{{1}}上下文中检索证书链的其余部分。
那么从文件加载证书链的最佳方法是什么?
答案 0 :(得分:3)
函数SSL_CTX_use_certificate_chain_file
将证书放入SSL_CTX::cert
,将链中的所有其他证书(其他CA证书)放入SSL_CTX::extra_certs
类型STACK_OF(X509)*
,以便获得附加链:
STACK_OF(X509)* ca_stack = sslctx->extra_certs;
我找不到任何可以在extra_cets
结构中直接访问它的SSL_CTX
字段的宏或函数,但是查看OpenSSL代码,它们可以直接在任何地方访问它。