【问题标题】:programmatically convert an x509 certificate into human readable format using openssl api使用 openssl api 以编程方式将 x509 证书转换为人类可读的格式
【发布时间】:2013-04-17 16:07:56
【问题描述】:

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

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

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

X509_print(stdout,cert);

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

尽我所能在 Google 上搜索,仍然一无所知。

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

【问题讨论】:

    标签: c openssl x509


    【解决方案1】:

    拥有 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 来提取 Common name(通过使用 NID_commonName)、Organization 等字段。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • @Eugine 是的,我知道 X509_print。但我试图在内存中捕获输出,而不执行文件 I/O
      • @mdk 你可以直接输出到其他句柄,不是吗?而且这个句柄也不一定是文件句柄吧?
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2017-11-19
        • 1970-01-01
        • 2010-09-20
        • 2011-03-07
        • 2011-11-27
        • 2013-04-23
        • 2013-02-26
        • 1970-01-01
        • 2014-09-01
        相关资源
        最近更新 更多