1

私は Web サービスが初めてで、SSL 経由でサーバーと通信する単純な spring-ws クライアントを作成する必要があります。状況は次のとおりです。

  • 私のクライアントは、Glassfish の localhost ws サーバーの http でうまく動作します (問題はリモート サーバーと https です)。
  • リモート サーバーは正常に動作します。送信されたデータだけで作業します
  • サーバーのhttpsアドレスを持っています
  • サーバープロバイダーからのクライアント証明書を持っています

そのようなタスクの簡単なチュートリアルを見つけるのは簡単だと思いましたが、そのようなものを見つけるのに問題があります. 本当に異常なのか、それとも私の問題なのか? これを作成するための良いチュートリアル/本を知っていますか? それはいくつかの簡単な簡単な手順かもしれません。実際に必要なのは、そのサーバーに接続してそこからデータを取得することだけです。

私は使っている:

編集:トピックの詳細

前述のチュートリアルからクライアントを変更して、ローカルホストで作成した Web サービス (SSL なし) で動作するようにしました。うまく機能しました。リクエストとレスポンスは正しかったです。次に、リモートサーバーで動作するように変更しました。新しいクラスを生成し、ApplicationContext にサーバーの新しいアドレスを設定しました。最初のエラーは、commons-logging ライブラリが見つからないことでした。追加しました。その後、新しいエラーが表示されました (そのエラーの短いバージョン):

org.springframework.ws.client.WebServiceIOException: I/O error: java.security.cert.CertificateException: No name matching certificatename found; nested exception is javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching certificatename found

keytool を使用して、jdk の cacerts に証明書を追加しました。役に立ちませんでした。私はそのエラーについて何かを見つけ、ここに最後の投稿からコードを追加しようとしました:

http://www.coderanch.com/t/557677/sockets/java/CertificateException-No-name-matching-hostname

あまり安全ではないはずですが、試してみました。新しいエラーは次のとおりです。

Exception in thread "main" org.springframework.ws.client.WebServiceTransportException: Internal Server Error [500]
at org.springframework.ws.client.core.WebServiceTemplate.handleError(WebServiceTemplate.java:663)
at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:587)
at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:537)
at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:384)
at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:378)
...
4

2 に答える 2

1

問題を解決しました。ようやくWSサーバーにアクセスできるようになり、ログを確認できるようになりました。証明書はまったく問題がないことがわかりました。メッセージはサーバーに正しく到着しました。サーバーが私のメッセージを解析しようとしたときに問題が発生しましたが、これは失敗し、サーバーはログにエラーを含むエラー500を返しました。

指定されたソースからエンベロープを作成できません

私と同僚は、サーバーがJava 6で実行されていることを発見しましたが、アプリケーションはJava 7で実行され、アプリケーションをJava 7プライベートサーバーに移動しようとしましたが、すべてが正常に機能しました。いくつかの検索の結果、おそらくパーサーxalan.jarとxerces.jarが問題であることがわかりました。これらを更新することで、問題を解決できる可能性もあります。とにかく、同じバージョンのJavaを使用することが解決策になるはずです。

残念ながら、Java 6に移行できず、サーバーはJava 7に移行できません(詳細は重要ではありません)。そこで、Axisを使用してまったく新しいクライアントを作成しました。正直なところ、この決定を下したことを非常に嬉しく思います。それは最初から機能していて、はるかに使いやすいです。誰かが興味を持っているなら、ここに私が従ったチュートリアルがあります(私が必要とした最後に生成されたコードを使用する方法もあります)

http://px.pats.no/px/Eclipse_tutorial.html

于 2013-02-05T16:59:16.100 に答える
0

この問題は、この問題を解決するために証明書に含めていない dns 名に関連しています。証明書を再作成してみてください。

keytool ... san=ip:10.1.1.1

または、Java にドメインを検証しないように指示する静的メソッドを追加してみてください。

 static{
javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(
new javax.net.ssl.HostnameVerifier(){

    public boolean verify(String dns,
            javax.net.ssl.SSLSession sslSession) {
        return true;
    }
});

}

于 2014-08-12T08:51:54.940 に答える