2009-07-24 22 views
42

自己署名入りのSSL証明書を使用して動作するApache Tomcat 6.xサーバーがあります。クライアントの証明書をサーバーに提示して、ユーザーのデータベースに基づいて認証できるようにします。私はそれがすべてオンラインで見つかった例に基づいて動作していますが、この例では、缶詰の証明書と事前ビルドJKSデータストアが付属しています。私は自分の証明書で自分のデータストアを作成したいが運がない。Tomcatサーバー/クライアント自己署名SSL証明書

Tomcatのデータストアを作成するにはどうすればよいですか?
Tomcatの自己署名証明書を作成するにはどうすればよいですか?

クライアント用の自己署名証明書を作成するにはどうすればよいですか?
Tomcatにクライアントの署名を強制的に信頼させるにはどうすればよいですか?

私は何時間もjava keytoolで遊んでいます。

答えて

59

最後に私の問題の解決策を得ましたので、他の誰かが動かなくなったら結果をここに掲載します。 自己署名証明書を生成するときに、デフォルトで

keytoolはDSA アルゴリズムを使用しています。私はことを発見しMichael's Software Thoughts & Ramblingsのマイケル・マーティンに

感謝以前のバージョンの は、 の問題がなく、これらのキーを受け入れました。 Firefox 3のベータ5では、 DSAは動作しませんが、RSAを使用すると動作します。 を生成するときに「-keyalg RSA」を渡すと、 certが作成され、Firefox 3ベータ5は完全に が受け入れられます。

私は単にそのフラグを設定し、FireFoxのすべてのキャッシュをクリアして、魅力的に機能しました!私はこれをプロジェクトのテストセットアップとして使用しています。これを他の人と共有する必要があるため、2つのSSL証明書を作成する小さなバッチスクリプトを作成しました。 1つはTomcatの設定にドロップすることができ、もう1つはFireFox/IEにインポートできる.p12ファイルです。ありがとう!

使用法:最初のコマンドライン引数は、クライアントのユーザー名です。すべてのパスワードは「パスワード」(引用符なし)です。必要に応じてハードコーディングされたビットを変更します。

@echo off 
if "%1" == "" goto usage 

keytool -genkeypair -alias servercert -keyalg RSA -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass password -keystore server.jks -storepass password 
keytool -genkeypair -alias %1 -keystore %1.p12 -storetype pkcs12 -keyalg RSA -dname "CN=%1,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass password -storepass password 
keytool -exportcert -alias %1 -file %1.cer -keystore %1.p12 -storetype pkcs12 -storepass password 
keytool -importcert -keystore server.jks -alias %1 -file %1.cer -v -trustcacerts -noprompt -storepass password 
keytool -list -v -keystore server.jks -storepass password 
del %1.cer 
goto end 

:usage 
echo Need user id as first argument: generate_keystore [username] 
goto end 

:end 
pause 

結果は2つのファイルです。 1つはserver.jksと呼ばれ、Tomcatにドロップし、{username} .p12というファイルをブラウザにインポートします。 server.jksファイルには、信頼できる証明書として追加されたクライアント証明書があります。

私は他の誰かがこれを見つけることを望みます。

そして、ここでは、Tomcatの7の(唯一のTomcat 6.xの上でテストした)あなたのTomcatのconf/sever.xmlファイル

<Connector 
    clientAuth="true" port="8443" minSpareThreads="5" maxSpareThreads="75" 
    enableLookups="true" disableUploadTimeout="true" 
    acceptCount="100" maxThreads="200" 
    scheme="https" secure="true" SSLEnabled="true" 
    keystoreFile="${catalina.home}/conf/server.jks" 
    keystoreType="JKS" keystorePass="password" 
    truststoreFile="${catalina.home}/conf/server.jks" 
    truststoreType="JKS" truststorePass="password" 
    SSLVerifyClient="require" SSLEngine="on" SSLVerifyDepth="2" sslProtocol="TLS" 
/> 

に追加する必要があるXML:

<Connector protocol="org.apache.coyote.http11.Http11NioProtocol" 
      port="8443" SSLEnabled="true" 
      maxThreads="200" scheme="https" secure="true" 
      keystoreFile="${catalina.base}/conf/server.jks" keystorePass="password" 
      clientAuth="false" sslProtocol="TLS" />  
+1

これはありがとうございます!私は一日中、さまざまな "チュートリアル"に悩まされています。これはclientAuth = "true"で実際に働いた最初のものです。 "。 –

+0

これは美しい答えです。私はバットファイルで多くの時間を節約しました。 – Yster

2

証明書を作成します。

<Connector port="8443" maxHttpHeaderSize="8192" 
     maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
     enableLookups="false" disableUploadTimeout="true" 
     acceptCount="100" scheme="https" secure="true" 
     keystoreFile="/home/bob/mykeystore" 
     clientAuth="false" sslProtocol="TLS" /> 

keytool -genkey -alias tomcat -keyalg RSA -keystore /home/bob/mykeystore 

は、あなたがTomcatののserver.xmlを編集して、例えば、SSLコネクタ上のキーストアのプロパティを指定し、次に必要な自己署名証明書のすべてのデータを入力します。

やTomcatのドキュメントに従ってください...

http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html

+3

を私は以前、それは私の半分の私の答えを得たことを見ましたが、あなたが不足していますよりトリッキーな部分。自己署名付きクライアント証明書を使用するにはどうすればよいですか? 指定した例では、「clientAuth = 'false'」と表示されます。 "このソケットを使用するためにTomcatがすべてのSSLクライアントにクライアント証明書を提示するようにしたい場合は、この値をtrueに設定してください。" これは私が望むものですが、 – davidemm

3

クライアント認証を有効にするには、Tomcatに「信頼ストア」を指定する必要があります。信頼できるルート証明機関の証明書を含むキーストアで、それぞれが「trustEntry」としてフラグが立てられています。

これはConnector要素の属性によって指定された:truststoreFiletruststorePasskeystorePassの値デフォルト)、およびtruststoreType(これは「JKS」デフォルト)。

クライアントが自己署名証明書を使用している場合、その「ルート」CAは証明書自体です。次に、クライアントの自己署名証明書をTomcatのトラストストアにインポートする必要があります。

多くのクライアントをお持ちの場合は、すぐに手間がかかります。その場合は、クライアントの署名証明書を調べることをお勧めします。 Java keytoolコマンドではこれはできませんが、必要なコマンドラインユーティリティはすべてOpenSSLで利用できます。または、大規模にEJBCAのようなものを見ることができます。

さらに、クライアントに、startcom.orgのような既存の空きCAを使用するよう依頼してください。 StartComの証明書がすべてのブラウザに含まれていないため、これはサーバー証明書では必ずしも機能しませんが、この状況は逆転し、StartComルート証明書をTomcatの信頼ストアに簡単にインポートできます。

1

これまでの回答は私の役に立ちましたが、シェルツールのバージョンはありません。だから私は1つ書いた。

key_gen.sh:tomcat8については

#! /bin/bash 
# a key generator for https, 

basename=server 
key_algorithm=RSA 
password_key=123456 
password_store=123456 
country=US 

# clean - pre 
rm "${basename}.jks" 

# generate server side 
keytool -genkeypair -alias "${basename}cert" -keyalg $key_algorithm -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=${country}" -keypass $password_key -keystore "${basename}.jks" -storepass $password_store 

server.xmlに次の設定を追加することができます。

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" 
     maxThreads="150" SSLEnabled="true" scheme="https" secure="true" 
     clientAuth="false" sslProtocol="TLS" 
     acceptCount="75" keystoreFile="${catalina.home}/conf/server.jks" keystorePass="123456" 
    /> 
関連する問題