OpenSSL从证书中获取主题备用名称

时间:2013-03-11 16:37:44

标签: ios objective-c openssl x509certificate

我正在开发一个iOS应用程序,需要从证书(.pfx)中读取主题备用名称。

Security.framework无法获取此信息,因此您使用的是OpenSSL(openssl-1.0.1e)

读取主题名称我正在使用X509_get_subject_name(证书),而对于Issuer我正在使用X509_get_issuer_name(证书)并且正在使用。

问题是主题备用名称。我找不到任何函数来返回这些信息。

是否可以使用OpenSSL获取主题备用名称?怎么样?

修改

我将证书导入MAC keychain。 在主题备用名称上,我看到NT主要名称和RFC 822名称。

我试过了,但它返回NULL:

GENERAL_NAME *name = (GENERAL_NAME*)X509_get_ext_d2i(cert,NID_subject_alt_name, NULL, NULL)

我正在阅读证书:

X509 *cert;
CFDataRef der = SecCertificateCopyData(certificate);
const unsigned char * ptr = CFDataGetBytePtr(der);
int len = CFDataGetLength(der);
d2i_X509(&cert,&ptr,len);

1 个答案:

答案 0 :(得分:2)

您可以使用X509_get_ext_by_NID()然后X509_get_ext()来获取x509主题备用名称:

int loc = X509_get_ext_by_NID(X509 *, NID_subject_alt_name, -1);

if (loc >= 0) {
  X509_EXTENSION * ext = X509_get_ext(X509 *, loc);

然后您必须使用sk_GENERAL_NAME_num()和sk_GENERAL_NAME_value()或X509_get_ext_d2i()来解析扩展程序。