2

使用 c 中的 OpenSSL 库,将完整的证书链从 PEM 文件加载到内存中的最佳方法是什么?输入是一个连接了 1..n 个证书的 PEM 文件,输出应该是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(),但似乎没有API 函数SSL可以从上下文中检索证书链的其余部分。

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

4

1 回答 1

4

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

于 2012-03-21T00:03:32.480 回答