1

我正在尝试实现 OpenSSL 的 OCSP 功能,如此处所述,它需要 X509 对象作为参数。我只有 .cer 格式的 x.509 证书文件。如何在 OpenSSL 中使用 .cer 证书初始化 X509 对象?(如果重要的话,我在 XCode 中使用 OpenSSL 1.0.0g)。

4

1 回答 1

5

主要有两种情况。我将在这里介绍两者。

请注意,我假设您使用的是 C++。你选择的平台,如果它是理智的,应该有这些功能的绑定。


在第一种情况下,您的证书文件采用所谓的 PEM 形式。如果您在文本编辑器中打开证书并看到一些带有人类可读标头的 Base64 编码数据,那么这就是 PEM 文件。在这种情况下,您想要的功能具有签名

X509 *PEM_read_X509(FILE *fp, X509 **x, pem_password_cb *cb, void *u);

第一个参数是指向 FILE 返回的 FILE 对象的指针fopen()。您可以将最后三个参数保留为NULL. 此函数返回一个指向X509创建的对象的指针,或者NULL在出错时返回。


在第二种情况下,您的证书文件采用所谓的 DER 形式。如果您在文本编辑器中打开证书并看到一些垃圾,那可能是 DER 文件。在这种情况下,您想要的功能具有签名

X509 *d2i_X509_fp(FILE *fp, X509 **x);

您应该能够留下第二个参数NULL。这个函数返回一个指向X509创建的对象的指针,或者返回一个NULL错误的指针。


众所周知,OpenSSL 官方文档不完整。如果您正在寻找一本好的参考手册,我可以推荐 O'Reilly 的“使用 OpenSSL 的网络安全”(ISBN 978-0-596-00270-1)。它是为 OpenSSL 0.9.6 / 0.9.7 编写的,并没有完全涵盖某些主题(例如 CRL),但涵盖了所有重点并提供了示例代码。如果有的话,它将帮助您减少迷路:)

于 2012-07-26T15:14:17.360 回答