2013-04-12 11 views
7

自分のサーバーで処理されるCSRを作成しています。サーバーが処理できるようにsubjectNameAltを設定する必要があります。私は遠くに検索し、X509_REQではなく、通常のX509証明書でそれを行う方法を見つけました。私はこれをどのようにして行うことができますか(CとOpenSSL、すなわちX509_get_ext_d2iの同等物が必要ですが、X509_REQの場合)?X509_REQにsubjectNameAlt拡張をどのように追加しますか?

答えて

10

プログラム

は、OpenSSLが付属していますdemos/x509/mkreq.cファイルを見てください。リクエストを作成し、代替名として電子メールアドレスを追加します。ストリップダウン、それは次のようん:OPは、要求されたが、私は、他の人のための場所で、この節を残して、コマンドラインから

int add_ext(STACK_OF(X509_EXTENSION) *sk, int nid, char *value) { 
    X509_EXTENSION *ex; 
    ex = X509V3_EXT_conf_nid(NULL, NULL, nid, value); 
    if (!ex) 
    return 0; 
    sk_X509_EXTENSION_push(sk, ex); 
    return 1; 
} 

exts = sk_X509_EXTENSION_new_null(); 
add_ext(exts, NID_subject_alt_name, "email:[email protected]"); 
X509_REQ_add_extensions(x, exts); 
sk_X509_EXTENSION_pop_free(exts, X509_EXTENSION_free); 

add_extは、このように実装されていますAPI。

https://wiki.cacert.org/FAQ/subjectAltName、一時openssl-san.cnfファイルにopenssl.cnfファイルをコピーして、このようにすることを編集する助言:

[req] 
req_extensions = v3_req 

[ v3_req ] 
basicConstraints = CA:FALSE 
keyUsage = nonRepudiation, digitalSignature, keyEncipherment 
subjectAltName = @alt_names 

[alt_names] 
DNS.1 = host1.yourdomain.tld 
DNS.2 = host2.yourdomain.tld 
+2

私はCを経由してではなく、シェルやファイルシステムを介してこれをやってみたいです。 – chacham15

+0

驚くばかり!私はこれを数時間探してきました! – chacham15

+0

[alt_names]のような多値拡張をcを使ってプログラムで追加するにはどうしたらいいですか? – karim

関連する問題