【发布时间】: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