2012-09-27 25 views
5

Tomcat6/7に接続するユーザーを認証するためにSSLクライアント証明書を使用したいと思います。私はTomcatが正しく設定されており、Tomcatに与えたtruststoreのcertで署名した証明書は、IEとFirefoxの両方から正常に認証されています。連鎖クライアント証明書

私は顧客に自分のユーザーを管理できるようにしたいので、クライアント証明書をチェーンしたいと思います。これを達成するには、追加のユーザー証明書に署名するために使用する電子証明書管理CA証明書を顧客に発行します。私は、ユーザー証明書を送信するためにユーザーのブラウザーを必要とし、管理者CA(ルート証明書で署名されている)と連鎖して認証します。

私はopensslを使用していますが、ルートCAと中間CAを作成しました。中間CAを使用してリーフ証明書に署名しました。 3つの証明書をすべてpkcs12とpemに変換し、keytoolを使用してルート証明書をTomcatのトラストストアにインポートします。 openssl -verifyは中間証明書(および中間がルートに対して検証されている)に対してpkcs12の葉を検証します。しかし、ルート証明書(pkcs12)に対して検証するリーフ証明書(pkcs12)を取得できません。私はリーフ証明書を使用して認証するためにIEまたはFirefoxを取得することもできません。 IEは証明書を要求しますが、認証に失敗します(Tomcatのログには接続や失敗の記述はありません)。 Firefoxはリーフ証明書を要求しません。単に認証に失敗します。
root.bat:

​​3210 ここ

openssl verify -CAfile ..\root\Root.pem Leaf.pem 

は、私は3つの証明書を生成するために使用していますスクリプトです:ここでは

は、私はOpenSSLを使用してルートに対する葉を検証しようとする方法です。

intermediate.bat:

set name=Intermediate 
set password=dummypassword 
set caDir=../root 
set caName=Root 
set caPassword=dummypassword 
openssl genrsa -des3 -passout pass:%password% -out %name%.key 2048 
openssl req -new -key %name%.key -passin pass:%password% -out %name%.csr -subj "/C=US/ST=Chaos/L=TimeNSpace/O=None/CN=%name%" 
openssl x509 -req -days 3650 -in %name%.csr -CA %caDir%/%caName%.crt -CAkey %caDir%/%caName%.key -passin pass:%caPassword% -set_serial 1 -extfile GenerateCertificate.cfg -extensions v3_ca -out %name%.crt 
openssl pkcs12 -export -in %name%.crt -inkey %name%.key -passin pass:%password% -passout pass:%password% -chain -CAfile %caDir%/%caName%.crt -out %name%.pkcs12 
openssl pkcs12 -in %name%.pkcs12  -out %name%.pem  -nodes -passin pass:%password% 

葉.BAT:

set name=Leaf 
set password=dummypassword 
set caDir=../intermediate 
set caName=Intermediate 
set caPassword=dummypassword 
openssl genrsa -des3 -passout pass:%password% -out %name%.key 2048 
openssl req -new -key %name%.key -passin pass:%password% -out %name%.csr -subj "/C=US/ST=Chaos/L=TimeNSpace/O=None/CN=%name%" 
openssl x509 -req -days 3650 -in %name%.csr -CA %caDir%/%caName%.crt -CAkey %caDir%/%caName%.key -passin pass:%caPassword% -set_serial 1 -out %name%.crt 
openssl pkcs12 -export -in %name%.crt -inkey %name%.key -passin pass:%password% -passout pass:%password% -chain -CAfile %caDir%/%caName%.pem -out %name%.pkcs12 
openssl pkcs12 -in %name%.pkcs12  -out %name%.pem  -nodes -passin pass:%password% 

GenerateCertificate.cfg:

[ v3_ca ] 
subjectKeyIdentifier=hash 
authorityKeyIdentifier=keyid:always,issuer 
basicConstraints = CA:true,pathlen:3 

答えて

5

問題は、ルートおよび中間証明書がCA証明書として作成されていないということでした。 CA証明書としてそれらを作成するには

、私は彼らの作成スクリプトに

-extfile GenerateCertificate.cfg -extensions v3_ca 

を追加し、(CERT作成バッチファイルを含まれている)私の作業ディレクトリにGenerateCertificate.cfgファイルを追加しました。

私はこれらの変更を反映するためにオリジナルの投稿を編集しました。

関連する問題