2013-03-29 29 views
0

我的任務是從TLS證書中獲取「公共名稱」信息。 我設法通過解析TLS「證書」(在「你好服務器」之後) 消息並獲取指向證書的指針並傳遞給X509_NAME_get_text_by_NID來做到這一點;如何理解TLS證書採用PEM或DER格式

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格式?

回答

2

在TLS握手期間發送的證書始終是DER中的二進制數據。你不需要關心那裏的PEM。

如果您想使用相同的代碼從其他來源加載證書,那麼您需要分析它是否爲純文本(即只有32-127範圍內的字符)。如果是,那麼很有可能你有PEM。但不能保證你已經拿到了證書。你需要刪除頁眉和頁腳,如果它們在那裏,然後base64-解碼其餘的獲得DER,然後你可以解碼DER。

+0

非常感謝。我搜索這些信息,但無法在RFC或Wiki或網絡中找到它。如果你能與我分享一份包含這些信息的文件,我會解脫:)。 –

+0

@KadirErdemDemir您在尋找哪些信息? DER是RFC 5280中定義的唯一證書格式.PEM和其他任何東西都是DER證書的包裝和容器。在OpenSSL中使用的PEM文件格式沒有在任何標準中定義,儘管在RFC中定義了「PEM」術語,後來被重新命名爲base64 :)。 –