1

Commons HttpClient API を使用してサーバーの 1 つに接続しています。

このサーバーは SSL を使用し、有効な証明書 (Verisign Trust Network が発行) も使用します。

サーバーに接続しても、ブラウザが文句を言うことはありません。しかし、私のJavaプログラムはスローします

原因: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: 信頼できる証明書が見つかりません例外。

この有効な証明書が Java トラストストアにインポートされたとしても、同じ問題が発生します。

次の簡単なコードを使用してサーバーに接続しました..

HttpClient httpclient = new HttpClient();
  GetMethod httpget = new GetMethod("https://www.ourserver.com/"); 
  try { 
    httpclient.executeMethod(httpget);
    System.out.println(httpget.getStatusLine());
  } finally {
    httpget.releaseConnection();
  }

注: 私のブラウザは文句を言わなかったので、私たちのサーバーは信頼できる証明書を使用していると確信しています。

ありがとうございました。

4

2 に答える 2

1

古いバージョンの Java、つまり 1.4 を使用している場合、ベリサインのルート CA が信頼されていない可能性があります。その場合、証明書を含むトラストストアを構成する必要があります。これは「javax.net.ssl.trustStore」システム プロパティで実行できますが、実行することはお勧めできません。

「org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory」を実装して、指定されたトラストストアでカスタム SocketFactory を提供できます。

于 2010-03-04T12:19:04.673 に答える
0

ベリサインルートCAをトラストストアに追加しましたか?エラーは、証明書を発行したCAが信頼されていないことが原因である可能性があります。

ほとんどのWebブラウザのように、Javaのトラストストアが「デフォルト」のルートCA(Verisign、Thawteなど)を信頼するように自動的に構成されているかどうかはわかりません。keytoolを使用して、それぞれの信頼を手動で有効にする必要がある場合があります。これは、トラストストアへのインポートについて言及したので知っていると思います。

于 2010-03-04T11:57:28.183 に答える