2013-03-11 16 views
5

証明書(.pfx)からSubject Alternative Nameを読み込む必要があるiOSアプリケーションを開発しています。OpenSSL証明書からサブジェクトの別名を取得する

Security.frameworkがこの情報を取得する方法を持っていないので、あなたは私がX509_get_subject_name(証明書)を使用してのためだサブジェクト名を読み取るにはOpenSSL(opensslの-1.0.1e)

を使用しています発行者私はX509_get_issuer_name(証明書)を使用しています。

問題はサブジェクト代替名です。私はこの情報を返す機能を見つけることができません。

OpenSSLを使用してSubject Alternative Nameを取得することは可能ですか?どうやって?

編集:

私は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); 

答えて

2

をあなたはX509_get_ext_by_NIDを(使用してX509サブジェクト代替名を取得することができます)、その後X509_get_ext ():

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_nを使用して拡張機能を解析する必要がありますum()とsk_GENERAL_NAME_value()、またはX509_get_ext_d2i()を呼び出します。

+0

私はこれを試しています:(GENERAL_NAME *)X509_get_ext_d2i(証明書、NID_subject_alt_name、NULL、NULL); しかし、私はnullです。それは動作するはずですか? – Freedom

+0

理論的には、証明書がNULLの場合はNULLを取得する必要があります。証明書にサブジェクトの代替名の拡張子がない場合や、複数の名前が存在しない場合は、証明書を証明書にロードするコードと証明書の内容(またはopenssl x509 -in -textの出力)を投稿できますか? –

+0

私はX509_get_subject_name()を使用しています。 Macキーチェーンに証明書をインポートしました。オンになっている主題別名NTプリンシパル名とRFC 822名(同じ値があります)が表示されます。それが問題だろうか? – Freedom

関連する問題