2013-03-22 51 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

相关问题