Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何理解TLS证书采用PEM或DER格式_C_Ssl_Openssl - Fatal编程技术网

C 如何理解TLS证书采用PEM或DER格式

C 如何理解TLS证书采用PEM或DER格式,c,ssl,openssl,C,Ssl,Openssl,我的任务是从TLS证书中获取“公共名称”信息。 我通过解析TLS“certificate”(位于“hello server”之后)来实现这一点 消息,获取指向证书的指针,并通过NID传递给X509\u NAME\u get\u text\u p = certificate;//this is a pointer to certificate X509 *x; x = d2i_X509(NULL, &p, certificate_lenght); if (x == NULL) {

我的任务是从TLS证书中获取“公共名称”信息。 我通过解析TLS“certificate”(位于“hello server”之后)来实现这一点 消息,获取指向证书的指针,并通过NID传递给X509\u NAME\u get\u text\u

p = certificate;//this is a pointer to certificate 
X509 *x;
x = d2i_X509(NULL, &p, certificate_lenght);

if (x == NULL)
{
    fout << " X509 object is null " << std::endl;
    return;
}
fout << " no x509  error " << endl;
X509_NAME_get_text_by_NID(X509_get_subject_name(x),NID_commonName, peer_CN, 256);
p=证书//这是指向证书的指针
X509*x;
x=d2i_X509(空,&p,证书长度);
如果(x==NULL)
{

在TLS握手期间发送的证书始终是DER中的二进制数据。您不需要关心PEM


如果要使用相同的代码从其他源加载证书,则需要分析它是否为纯文本(即仅限32-127范围内的字符)。如果是,则很可能您有PEM。但不能保证您已获得证书。如果存在页眉和页脚,则需要删除页眉和页脚,然后base64解码其余部分以获取DER,然后您可以解码DER。

非常感谢。我正在搜索此信息,但在RFC或Wiki或中找不到它net。如果您可以与我共享一个包含此信息的文档,我将免除:)@KadirErdemDemir您要查找的确切信息是什么?DER是RFC 5280中定义的唯一证书格式。PEM和其他任何内容都是DER证书的包装器和容器。OpenSSL中使用的PEM文件格式在任何标准中都没有定义d、 尽管RFC中定义了“PEM”术语,后来将其重命名为base64:)。