使用OpenSSL将证书链从PEM文件加载到STACK_OF(X509)*

时间:2012-03-20 23:08:52

标签: c ssl openssl pem

在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}}上下文中检索证书链的其余部分。

那么从文件加载证书链的最佳方法是什么?

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代码,它们可以直接在任何地方访问它。