c - 如何理解TLS证书是PEM还是DER格式

标签 c ssl openssl

我的任务是从 TLS 证书中获取“通用名称”信息。 我设法通过解析 TLS“证书”(位于“hello server”之后)来做到这一点 消息并获取指向证书的指针并传递给 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。

关于c - 如何理解TLS证书是PEM还是DER格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15702930/

相关文章:

url - SSL 是否保护 uri 中 @ 之前的部分?

c# - RemoteCertificateChainErrors - 空 ChainElementStatus C#

ssl - 如何在 Vapor Web 框架中安装 SSL 证书?

python-3.x - 无法获取本地颁发者证书 mac OS

c - 求余弦的泰勒级数

c - 使用 libevent 在 C 中实现 TCP 端口事件回调

c - 如何打破 libuv 中的长回调链

c - C 中的密码强度检测器不起作用

c++ - 在 C 或 C++ 中解析 DER x509

google-app-engine - Google App Engine 是否支持自签名证书? (不是自定义域)