使用openssl api以编程方式将x509证书转换为人类可读格式

时间:2013-04-17 16:07:57

标签: c openssl x509

在我的基于C的openssl客户端中,我能够与ssl服务器建立ssl连接,并使用

检索服务器提供的ssl证书
X509* cert = SSL_get_peer_certificate( SSL *ssl);

现在我想以人类可读的形式转换这个X509证书的内容。 是的我可以使用以下方式在控制台上显示:

X509_print(stdout,cert);

但我不想像那样打印它。我想将cert内容捕获到一些char缓冲区中,以便我可以按照我选择的方式进一步处理它。

尽可能多地用Google搜索,仍然一无所知。

任何可以帮助我的黑客? 提前谢谢。

3 个答案:

答案 0 :(得分:2)

获得X.509证书后,您可以使用各种X509函数,例如X509_get_version,X509_get_notBefore,X509_get_notAfter,X509_get_subject_name等。您可以查看x509.h here

在某些情况下,例如X509_get_subject_name,您将使用X509_NAME。在X509_NAME上,您可以使用X509_NAME_get_text_by_NID提取公用名称(通过使用NID_commonName),组织等字段。

这取决于您要显示的所有信息。没有黑客。这只是编程。如果您需要更多信息,我也可以发布代码示例。但我认为这必须足以开始。

答案 1 :(得分:2)

没有“人类可读的X.509证书格式”,这就是为什么你什么都找不到的。每个软件都会提取不同的信息并以不同方式显正如另一个答案中所指出的,您可以通过调用各种函数来提取数据,然后将其打印出来。或者你可以直接输出X509_print来处理除stdout之外的其他东西以获取OpenSSL产生的内容。

答案 2 :(得分:0)

X509_print应该采用BIO第一个参数。 X509_print_fp接受FILE* stdout

使用X509_print(生物风味)将其打印到内存生物,然后使用BIO_get_mem_data提取内容。