3

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

X509* cert = SSL_get_peer_certificate( SSL *ssl);

现在我想将这个 X509 证书的内容转换为人类可读的形式。是的,我可以简单地使用以下命令在控制台上显示:

X509_print(stdout,cert);

但我不想像那样打印它。我想将证书内容捕获到某个字符缓冲区中,以便在以我选择的方式显示它之前进一步处理它。

尽我所能用谷歌搜索,仍然一无所知。

有谁能帮我解决这个问题?提前致谢。

4

3 回答 3

2

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

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

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

于 2013-04-17T16:26:21.550 回答
2

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

于 2013-04-18T16:08:51.230 回答
0

X509_print应该采取BIO第一个论点。X509_print_fp接受一个FILE*stdout

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

于 2017-05-12T21:56:30.200 回答