2009-10-12 14 views
6

私はTomcatの人ではないので、私は迷っています。サードパーティのWebサービスを使用する必要があり、SSLを介したクライアント認証が必要なため、SSL証明書を生成して発行しました。残念ながら、これは彼らがそれをサポートしている限りであり、実際にどのように方向を与えることはできませんそれを使用します。私はこのサードパーティーを使用して立ち往生しているので、残念ながら私は彼らのサポートの欠如を立てなければなりません。SSLを使ったTomcatクライアント認証

私が持っているのは、ベンダーが提供しているJavaアプリケーション(明らかにこれに対処していない人)、CentOS 5.3で6.0.20を実行するTomcatアプリケーションサーバー、3番目のSSL証明書ですパーティー。

この時点で何をする必要がありますか?私がオンラインで見つけられるのは、自分のアプリが他の人に接続する必要がないときや、ポート8443上でSSLを使う方法ではなく、自分のアプリケーションが接続しているものに対してクライアント認証を使用できるようにキーストアを設定する方法ですどのようにして設定しているか)。ここで

+0

私はあなたが提供した情報に基づいて、ウェブサービスプロバイダに同意する傾向があります。標準で広くサポートされている認証メカニズムを使用することを選択しました。あなたが指定したインターフェースを*実装する方法を教えてくれています。幸いなことに、彼らは広く使われている標準を選んだので、多くのリソース(StackOverflowのようなものの多くは無料です)を利用して、他のコンテキストで恩恵を受ける可能性のある技術を学ぶことができます。 – erickson

+0

私の悩みは、この1つの問題より深くなります。私たちはサービスへのアクセス権を得るために支払うだけでなく、トランザクションごとにも支払う必要があるので、少なくとも少しは助けてください(技術的な詳細がほとんどない曖昧なPDFファイル以外) 。私の他のサードパーティのサービスプロバイダは、少なくとも私にコード例を教えてくれたり、質問があるときに正しい方向に向けることができます。 – dragonmantank

答えて

3

は本当に長い答えです:http://java.sun.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html

は、それは私の言葉を服用しないでください、私は、サーバーがそれを要求したとき、クライアントとして、クライアント認証が自動的に実行されます、と信じています。

tomcatを設定することが質問であれば、http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.htmlをお読みですか?特に、ConnectorエレメントのclientAuth属性に注意してください。

+0

私がしなければならないことは、私が推測するPort属性を使わずにキーストアを生成することです。私のアプリがサードパーティにアクセスすると(SOAP経由で)、SSL認証の要求を受け取り、クライアントSSLはありますか? – dragonmantank

+0

彼らがあなたに接続するために使用しなければならない証明書を与えた場合、あなたは秘密鍵も与えておく必要があります。通常、両方を生成し、秘密鍵を保持し、証明書のコピーを送信してサーバーに配置します。しかし、ええ、秘密鍵と証明書をキーストアに入れ、自分のサーバーの証明書をトラストストアに取得し、それらをSSLContextに入れてSSLソケットを生成します。 –

1

これは、Tomcatで実行されているWebアプリケーションにシステムプロパティを渡すこと以外に、Tomcatの設定に関するものではありません。

Webアプリケーションを提供するベンダーは、リモートWebサービスへのSSL接続を行う際に、特定のクライアント証明書を使用するためにクライアントからクライアント接続を取得する方法を伝えることができます。

たとえば、クライアント証明書と秘密鍵を設定可能な場所から検索できるSSL接続用のカスタムKeyManagerをアプリケーションに実装させることができます。

これを行っていない場合は、デフォルトのSunX509 KeyManagerを使用している可能性があります。

デフォルトのKeyManagerでは、明らかにkeytoolを使用して、証明書が表すクライアント証明書と秘密鍵を含むキーストアを作成できます。次に、次のシステムパラメータを使用してキーストアを指定できます。

-Djavax.net.ssl.keyStore="/path/to/keystore" 
-Djavax.net.ssl.keyStorePassword="<password>" 

これらのプロパティを渡すようにTomcatを設定する必要があります。

2

更新:

のTomcatでのクライアント認証を有効にするには、次の方法を試してみてください。

tomcatがクライアント認証を利用するには、3つの証明書が必要です。すなわち、Tomcatのサーバ証明書、ブラウザのクライアント証明書、および前述の両方の証明書に署名するCAの証明書です。ここでは、Windowsでそれを行う方法を示します。

2つの方法があります。

1)CSRファイル、つまり証明書署名要求が必要です。VerisignまたはComodoなどの認証機関に送信することができます。彼らはあなたに証明書を提供します。または

2)独自の認証局を作成し、証明書に署名することができます。しかし、個人的な使用のためだけにこれを行うことをお勧めします。

以下の手順を実行するには、JavaとOpenSSLがインストールされている必要があります。

証明書署名要求を生成するには、その鍵が必要です。キーを生成するには、CMDで次のコマンドを入力します。

opensslのgenrsa -out Serverkey.key 1024

これは、ファイル "Serverkey.key" を生成します。鍵のサイズは1024です。それはあなたの要件に応じて与えることができます。

次のコマンドを使用してCSRファイルを生成します。

のopenssl reqを-new -key Serverkey.key -out ServerReq.csr -config /path/to/openssl.cnf

このコマンドを実行したら、あなたはいくつかを与えることを求められます情報。 その後、あなたのディレクトリにCSRファイルがあります。このファイルをCAに送信することができます。上記の2つのコマンドの助けを借りて、あなたの個人的な使用のためにこれを実行していて、独自のCAを持っていたい場合は、CAの鍵とCSRを作成してください。 CAのCSRを取得したら、次のコマンドの助けを借りてCAの鍵で署名することができます。

のopensslのx509 -req -days 365 -in CAReq.csr -signkey CAKey.key -out CA.crt

あなたがCA証明書を持っていたら、他の証明書に署名するためにそれを使用することができます。あなたは、クライアント証明書に同じコマンドを使用することができます

のopensslのx509 -req -days 365 -CA CA.crt -CAkey CAKey.key -CAcreateserial -in ServerReq.csr -outをserver.crt

同じように。

ここのクライアントであるブラウザは、P12形式の証明書を受け入れます。 P12形式は、証明書とキーを含むファイルです。

CRTをP12に変換するには、次のコマンドを使用します。 Tomcatので

のopensslのpkcs12 -export -inをserver.crt -inkey ServerKey.key -chain -CAfile CA.crt -out ServerCert.p12

、CAのを持っています1トラストストアがありますもう1つはサーバーの鍵と証明書(p12ファイル)を持つキーストアです。

CAの証明書をtruststoreにインポートするには、次のコマンドを使用します。

keytool -import -alias CertAuth -keystore caCerts。jks-file CA.crt

任意のエイリアスを指定できます。上記のコマンドを実行した後に尋ねられたときに入力したパスワードに注意してください。このパスワードは、server.xmlファイルで使用します。以下のコマンドにも同じことが適用されます。

p12形式の証明書をキーストアにインポートするには、次のコマンドを使用します。

のkeytool -importkeystore -destkeystore tomcat.keystore -srckeystore -ServerCert.p12 -srcstoretype PKCS12 -alias 1

さて、以下のようにTomcatのserver.xmlを変更します。

<Connector port="8443" 
      protocol="org.apache.coyote.http11.Http11NioProtocol" 
      SSLEnabled="true" scheme="https" secure="true" 
      truststoreFile="path/to/truststorefile" truststorePass="password" 
      keystoreFile="path/to/keystorefile" keystorePass="password" 
      clientAuth="true" sslProtocol="TLS" 
      /> 

ここで、クライアントのP12形式の証明書をブラウザにインポートします。次に、tomcatサーバーを起動し、https://localhost:8443にアクセスしてみてください。この回答の詳細については、blogをご覧ください。お役に立てれば。

関連する問題