8

証明書 (.pfx) からサブジェクトの別名を読み取る必要がある iOS アプリを開発しています。

Security.framework にはこの情報を取得する方法がないため、OpenSSL(openssl-1.0.1e) を使用しています。

サブジェクト名を読み取るには X509_get_subject_name(certificate) を使用しており、発行者には X509_get_issuer_name(certificate) を使用しており、機能しています。

問題はサブジェクトの別名です。この情報を返す関数が見つかりません。

サブジェクトの別名を取得するために OpenSSL を使用することは可能ですか? どのように?

編集:

証明書を MAC キーチェーンにインポートしました。サブジェクト代替名には、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);
4

1 に答える 1

4

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() を使用して拡張子を解析する必要があります。

于 2013-03-12T10:53:12.277 に答える