2011-11-05 9 views
1

実際のWebサービス、クライアント、および.jspドリブンUIを正常に構築しました。 Eclipse、Axis2、Tomcat 7、Java 7でこれを行いました。SSLを使用してTomcat/Axis2 Webサービスをセキュリティで保護する際の問題

基本的な流れは、ユーザーが.jspを訪問して入力データをフォームに送信することです。 JSPは「要求」オブジェクトをJavaクライアントに転送します。 JavaクライアントはWebサービスを消費し、ユーザー入力を送信します。このサービスは、JDBCを介してSQL Serverデータベースに接続して情報を取得し、ユーザーに表示されます。

これはすべてHTTP上で完璧に動作しますが、現在はプロセスを保護したいと思っています。ここで問題に取り掛かります。私は証明書を作成し、Tomcatにそれを使用させることができます。 HTTPS経由でWeb UIに接続してフォームを送信し、データを正常に取得できます。問題は、これがフロントエンドのみを確​​保していることです。 Webサービスクライアントコードは、バックグラウンドでHTTP経由でサービスに接続しています。

this pageによると、SSL経由の接続でサービスを有効にするために本当に必要とするのは、axis2.xmlファイルを更新し、HTTPS用の新しい「transportReceiver」ノードを含めることだけです。私はそれを行い、安全なエンドポイントを使用するためにクライアントコードを再生成しました。それは動作しません。

httpのポート8081とhttpsのポート8443でリッスンするようにTomcatを設定しました。しかし、一致するaxis2.xmlをを変更し、Tomcatを起動した後、私は次の取得:私は(8445に、例えば)axis2.xmlを内のポート番号を変更しようとしている

[INFO] Listening on port 8443 [ERROR] Terminating connection listener o[email protected]16d60567 after 10retries in 0 seconds. java.net.BindException: Address already in use: JVM_Bind at java.net.DualStackPlainSocketImpl.bind0(Native Method) at java.net.DualStackPlainSocketImpl.socketBind(Unknown Source) at java.net.AbstractPlainSocketImpl.bind(Unknown Source) at java.net.PlainSocketImpl.bind(Unknown Source) at java.net.ServerSocket.bind(Unknown Source) at java.net.ServerSocket.(Unknown Source) at java.net.ServerSocket.(Unknown Source) at org.apache.axis2.transport.http.server.DefaultConnectionListener.run(DefaultConnectionListener.java:80) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)

、および作品のその種。サーバーは正常に起動できますが、最終的には同じエラーが表示されます。たとえば、WSDLを取得すると、コンソールからエラーが表示されます(ただし、WSDLは表示されます)。また、Iは、ポート8445上では、私は次のエラーを取得する場合、実際にサービスを利用しようとした場合:

org.apache.axis2.AxisFault: Connection has been shutdown: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?

私はTomcatがない8445 8443、上でHTTPSを処理するように設定されているため、これがあると仮定することができますが、私正直わからない。

私は8443としてポートを出て、起動時のエラーを無視した場合、私はサービスに接続するとき、私は以下のようなメッセージが出ます:

org.apache.axis2.AxisFault: Connection has been shutdown: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

私はそれが私証明書を認識するために取得しようとするthese stepsを追いました、私のJRE7キーストアにインポートすると、次のようになります。

keytool error: java.lang.Exception: Certificate reply and certificate in keystore are identical

基本的に、その証明書はすでに存在しています。どちらが意味があるのは、Tomcatがすでにうまく使用しているからです。

私はこの時点でかなり無知です。私は本当に何をすべきかわからない。どんな一般的なガイダンス、またはステップバイステップのハウツーへのリンクが本当に役立つでしょう。

しかし、具体的な質問は... axisReceiverノードをaxis2.xmlに設定するとどういうことでしょうか? Tomcatが稼働しているポートとそれを使用すべきポートを教えていますか、Axis2にはそれらのポートで起動する独自のサーバーがありますか?後者のように見えますが、それは私にとって大変なことではありません。

答えて

2

サーブレットトランスポートを正しく構成する方法は、Axis2 documentationに記載されています。あなたが記述している症状は、org.apache.axis2.transport.http.SimpleHTTPServerを参照するtransportReceiverがあることを示唆しています。 Axis2(1.5.6または1.6.1)の最新バージョンを使用していることを確認してください。

+0

はい、それでした!私は、AxisServletListenerを使用するようにtransportReceiverエントリを変更し、ポートの問題を解決しました。ありがとう! –

0

ポートの問題に関するAndreasの回答を参照してください。証明書の問題に関しては、キーストアとトラストストアの違いを私が誤解していました。 JVMのデフォルト設定は、USER_HOME \ .keystoreファイルではなく、JAVA_HOME \ lib \ security \ cacertsをトラストストアとして使用することです。そこに証明書をインポートすると、エラーは消えてしまいました。

また、信頼ストアをキーストアファイルに設定することで、コードを介して証明書の問題を解決することもできました。私はcacertsストアに証明書をインポートする前にこれを行いました。これは、適切なサービスを呼び出す前に、クライアントコードに行く:HTTPSに接続する方法の

System.setProperty("javax.net.ssl.trustStore","C:\\path\\to\\.keystore"); 
System.setProperty("javax.net.ssl.trustStorePassword","password"); 
0

ワンJAX-WSに

E:\WSDL>wsimport -keep -p com.mypack.webservice https://domain:port/ws/MyService?wsdl 

を使用している。これは、WSDLフォルダの下にパッケージ構造を生成します。これを使って。

これで、トラストストアをrun.batに置くか、またはSystemクラスを使用してプロパティを設定するだけです。

正常に動作します。

関連する問題