我正在开发一个iOS应用,它将需要从证书(.pfx)中读取使用者替代名称。

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

要读取使用者名称,我正在使用X509_get_subject_name(证书),对于发行人,我正在使用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);

最佳答案

您可以使用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()来解析扩展名。

08-26 06:37
查看更多