5

SSLクライアント証明書を使用して、tomcat6/7に接続しているユーザーを認証したいと思います。Tomcatが正しく構成されており、Tomcatに提供したトラストストアの証明書で署名した証明書は、IEとFirefoxの両方から正常に認証されています。

また、顧客が自分のユーザーを管理できるようにしたいので、クライアント証明書をチェーンしたいと思います。これは、追加のユーザー証明書に署名するために使用する中間管理CA証明書を顧客に発行することで実現できます。認証のために管理CA(ルート証明書によって署名された)とチェーンされたユーザー証明書を送信するには、ユーザーのブラウザーが必要になります。

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

これが、opensslを使用してルートに対してリーフを検証する方法です。

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

3つの証明書を生成するために使用しているスクリプトは次の
とおりです。root.bat:

set name=Root
set keyPassword=dummypassword
set trustPassword=dummypassword
openssl genrsa -des3 -passout pass:%keyPassword% -out %name%.key 4096
openssl req -new -key %name%.key -passin pass:%keyPassword% -out %name%.csr -subj "/C=US/ST=Chaos/L=TimeNSpace/O=None/CN=%name%"
openssl x509 -req -days 3650 -in %name%.csr -signkey %name%.key -passin pass:%keyPassword% -extfile GenerateCertificate.cfg -extensions v3_ca -out %name%.crt
openssl pkcs12 -export -in %name%.crt -inkey %name%.key -passin pass:%keyPassword% -passout pass:%keyPassword% -out %name%.pkcs12
keytool -noprompt -import -file %name%.crt -alias %name% -keystore %name%.truststore -deststorepass %trustPassword%
keytool -list -v -keystore %name%.truststore -storepass %trustPassword% > %name%.truststore.dump.txt
keytool -exportcert -alias %name% -keystore %name%.truststore -storetype jks -storepass %trustPassword% -rfc -file %name%.truststore.pem
openssl pkcs12 -in %name%.pkcs12     -out %name%.pem     -nodes -passin pass:%keyPassword%

中間.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%

leaf.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
4

1 に答える 1

5

問題は、ルート証明書と中間証明書がCA証明書として作成されていないことでした。

それらをCA証明書として作成するために、私は追加しました

-extfile GenerateCertificate.cfg -extensions v3_ca

それらの作成スクリプトに追加し、GenerateCertificate.cfgファイルを作業ディレクトリ(証明書作成バッチファイルを含む)に追加しました。

これらの変更を反映するために、元の投稿を編集しました。

于 2012-10-03T20:13:15.150 に答える