47

自己署名 SSL 証明書を使用して Apache Tomcat 6.x サーバーを実行しています。ユーザーのデータベースに基づいてクライアントを認証できるように、クライアントが独自の証明書をサーバーに提示するようにします。オンラインで見つけた例に基づいてすべてが機能していますが、この例には、缶詰の証明書とビルド済みの JKS データストアが付属していました。独自の証明書を使用して独自のデータストアを作成したいのですが、うまくいきません。

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

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

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

4

4 に答える 4

62

最後に私の問題の解決策を得たので、他の誰かが動けなくなった場合はここに結果を投稿します.

Michael's Software Thoughts & Ramblings のMichael Martin のおかげで、次のことがわかりました。

デフォルトでは、keytool は自己署名証明書を生成するときに DSA アルゴリズムを使用します。Firefox の以前のバージョンでは、これらのキーを問題なく受け入れていました。Firefox 3 ベータ 5 では、DSA を使用しても機能しませんが、RSA を使用すると機能します。自己署名証明書を生成するときに「-keyalg RSA」を渡すと、Firefox 3 ベータ 5 が完全に受け入れる証明書が作成されます。

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

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

@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 つは、Tomcat にドロップする server.jks という名前のファイルで、もう 1 つは、ブラウザーにインポートする {username}.p12 という名前のファイルです。server.jks ファイルには、トラステッド証明書として追加されたクライアント証明書があります。

他の誰かがこれが役立つことを願っています。

Tomcat conf/sever.xml ファイルに追加する必要がある XML は次のとおりです (Tomcat 6.x でのみテスト済み)。

<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"
/>

Tomcat 7 の場合:

<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" />    
于 2009-07-27T16:56:05.600 に答える
3

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

これは、Connector要素の属性truststoreFileによって指定されtruststorePassます。keystorePasstruststoreType

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

多くのクライアントがいる場合、これはすぐに面倒になります。その場合、クライアントの証明書への署名を検討することをお勧めします。Javakeytoolコマンドではこれを実行できませんが、必要なコマンドライン ユーティリティはすべて OpenSSL で利用できます。または、 EJBCAのようなものを大規模に調べることもできます。

さらによいのは、クライアントにstartcom.orgなどの既存の無料の CA を使用するよう依頼することです。StartCom の証明書はすべてのブラウザーに含まれているわけではないため、これはサーバー証明書に対して常に機能するとは限りませんが、この状況は逆であり、StartCom ルート証明書は Tomcat 信頼ストアに簡単にインポートできます。

于 2009-07-24T23:42:15.387 に答える
2

証明書を作成します。

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

必要な自己署名証明書のすべてのデータを入力してから、Tomcat のserver.xmlを編集し、SSL コネクタのキーストア プロパティを指定します。

<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" />

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

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

于 2009-07-24T22:21:53.053 に答える
1

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

key_gen.sh:

#! /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

の場合tomcat8、次の構成を に追加できます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"
    />
于 2015-04-22T11:57:00.480 に答える