【问题标题】:Read X509-Certificate to process it阅读 X509-Certificate 进行处理
【发布时间】:2015-05-14 08:00:14
【问题描述】:

我需要阅读 C++ 中的 X509 证书。我找不到使用 GnuTLS 库的方法。证书必须以 PEM 或 DER 格式读取,以便我可以使用 GnuTLS 库的功能对其进行处理。 openssl 中提供的 bio 文件是否有一个挂件,可以让我读取证书并将其转换为可处理的格式?

【问题讨论】:

  • 如果你愿意使用更高级别的库(依赖于 OpenSSL),你可以看看sslpkix's unit tests 来了解一下。类似于FileSink sink; sink.open("foo.crt", "rb"); Certificate cert; cert.load(sink); std::cout << cert.subject().common_name() << std::endl; - 我的错是因为还没有正式的文档,也没有完整的代码覆盖率。 - 自行决定使用。最终,您可能会查询它的内部内容,以找到如何将一堆 OpenSSL 调用组合在一起以实现相同目的。
  • 参见 GnuTLS 手册中的3.4 Input and Output。此外,如果您查看 GnuTLS 源代码,您会发现它在其示例中使用了 FILE*fopen|fread。您可能必须避免使用 C++ istreams,因为您无法访问 FILE* 或描述符。 Stack Overflow 有几个关于 C++/FILE*/Descriptor 问题的问题。
  • @jww 当我使用 fopen 命令读取证书时,在处理 FILE 时出现以下错误:错误:无法将 'FILE* {aka _IO_FILE*}' 转换为 'const gnutls_datum_t*' for参数 '2' 到 'int gnutls_x509_crt_import(gnutls_x509_crt_t, const gnutls_datum_t*, gnutls_x509_crt_fmt_t)' ret = gnutls_x509_crt_import(c, fp, GNUTLS_X509_FMT_DER);>
  • @Maxi - 请查看 GnuTLS 源代码。特别是,查看.../src/serv.c 以了解 GnuTLS 在其示例代码中是如何做到的。您可以找到与cd gnutls-3.4.1; grep -R gnutls_x509_crt_import * | grep src 一起使用的所有位置。

标签: c++ x509certificate pem gnutls


【解决方案1】:

实际上生成一个包含证书元组和证书长度的变量很重要。可以使用 fopen()fread() 读取证书。可以使用 gnutls_x509_crt_import() 处理元组。这解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 2019-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多