2013-03-22 279 views
2

我試圖讓雙方在C的X509證書對象目前我得到的CN這樣的CN和EMAILADDRESS領域:如何以編程方式獲取X509證書中的電子郵件地址?

cert_entry = X509_NAME_get_entry(X509_get_subject_name(cert), 0); 
ASN1_STRING *entryData = X509_NAME_ENTRY_get_data(cert_entry); 
ASN1_STRING_to_UTF8(&CN, entryData); 
printf("%s",CN); 

我的問題是如何獲取的EMAILADDRESS場?我想過解析這個字符串,但我猜想必須有一個更明智的方法來做到這一點?

+0

想通了 cert_entry = X509_NAME_get_entry(X509_get_subject_name(CERT),5); ASN1_STRING * entryData1 = X509_NAME_ENTRY_get_data(cert_entry); ASN1_STRING_to_UTF8(&email,entryData1); 每個名稱條目都是證書中的一個條目,其中0代表國家,1代表國家等等... 5是電子郵件地址 – wangyif2 2013-03-22 03:31:37

+3

添加那個答案然後:)回答你自己的問題是可以的。 – 2013-03-22 03:32:56

回答

4

想通了

X509_NAME * subject_name = X509_get_subject_name(cert); 
int nid_email = OBJ_txt2nid("emailAddress"); 
X509_NAME_get_text_by_NID(subject_name, nid_email, peer_email, 256); 
+0

有保證電子郵件地址是索引5?我以爲你會遍歷集合,看看哪個是一個電子郵件地址(如果我已經閱讀了文檔,請使用'X509_NAME_ENTRY_get_object')。 – 2013-03-22 07:47:08

+0

在朋友的幫助下,我可以通過以下方式修復硬編碼: 'X509_NAME * subject_name = X509_get_subject_name(cert); int nid_email = OBJ_txt2nid(「emailAddress」); X509_NAME_get_text_by_NID(subject_name,nid_email,peer_email,256);' – wangyif2 2013-03-27 03:20:47

+1

您也可以使用常量'NID_pkcs9_emailAddress'作爲'NID'。 – dtoux 2015-06-01 02:06:54

相關問題