我的任务是从TLS证书获取“公用名”信息。
我设法通过解析TLS“证书”(在“ hello服务器”之后)来做到这一点
消息并获得指向证书的指针并传递给X509_NAME_get_text_by_NID;
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);
我希望我做对的事情。
我的问题是我为“ DER”格式设计我的逻辑,此信息可以“ PEM”格式出现。
如果是,我如何理解证书是PEM还是DER格式?
最佳答案
TLS握手期间发送的证书始终是DER中的二进制数据。您不需要在那里关心PEM。
如果要使用相同的代码从其他来源加载证书,则需要分析它是否为纯文本(即仅32-127范围内的字符)。如果是这样,则很可能您拥有PEM。但是,不能保证您已获得证书。如果需要删除页眉和页脚,则需要删除它们,然后对其余部分进行base64解码以获得DER,然后可以解码DER。