2015-05-14 128 views
0

我需要在C++中读取X509证书。我找不到使用GnuTLS库的方法。证书必须以PEM或DER格式读取,以便我可以处理GnuTLS库的两个函数。 openssl提供的生物文件是否有吊坠,可以让我读取证书并将其转换为可处理的格式?阅读X509证书来处理它

+0

如果你愿意使用更高级别的库(依赖于OpenSSL),你可以看看[sslpkix的单元测试](https://github.com/jweyrich/sslpkix/blob/master/test/ test.cpp)来获得一个想法。它会像'FileSink sink; sink.open(“foo.crt”,“rb”);证书证书; cert.load(汇); std :: cout << cert.subject()。common_name()<< std :: endl;' - 我没有正式文档,也没有完整的代码覆盖。 - 自行决定使用。最终,您可以查询其内在的胆量,找到如何将一堆OpenSSL调用放在一起以实现相同。 – jweyrich

+0

请参阅GnuTLS手册中的[3.4输入和输出](http://www.gnutls.org/manual/gnutls-guile/Input-and-Output.html)。另外,如果您查看GnuTLS源代码,您会发现它的示例中使用了“FILE *”和“fopen | fread”。您可能必须避免使用C++'istreams',因为您无法访问“FILE *”或描述符。 Stack Overflow在C++/FILE */Descriptor问题上有几个问题。 – jww

+0

@jww当我使用fopen命令读取证书时,在处理FILE时出现以下错误:错误:无法将参数'2'的'FILE * {aka _IO_FILE *}'转换为'const gnutls_datum_t *'到'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);> – Maximilian

回答

0

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