3

前置きとして、これは Java での私の最初のプログラムです。単体テスト プログラムで壁にぶつかりました。デフォルトのインターフェイスを使用できないため、リクエストを別のローカル アドレスに送信するように設定しました。ただし、これを行うと、SSL が機能しなくなります。これは、プログラムを実行したときに受け取ったトレースバックです。デフォルト以外のインターフェース(私の場合はeth1)でリクエストを作成し、SSLを機能させる方法を探しています。

Exception in thread "main" javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
at sun.security.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:371)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:572)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:640)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
at com.gargoylesoftware.htmlunit.HttpWebConnection.getResponse(HttpWebConnection.java:172)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1460)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponse(WebClient.java:1379)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:311)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:380)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:365)
at UnitTest.main(UnitTest.java:65)

--

public class UnitTest {

  public static void main(String[] args) throws Exception {
    WebClient webClient = new WebClient(BrowserVersion.FIREFOX_10);
    webClient.setWebConnection(new HttpWebConnection(webClient) {
      @Override
      protected AbstractHttpClient createHttpClient() {
        AbstractHttpClient client = super.createHttpClient();
        try {
          HttpParams params = client.getParams();
          params.setParameter(ConnRoutePNames.LOCAL_ADDRESS, InetAddress.getByName("XXX.XXX.XXX.XXX"));
          client.setParams(params);
        }
        catch(Exception e) {
          e.printStackTrace();
        }
        return client;
      }
    });
    webClient.setThrowExceptionOnScriptError(false);
    webClient.setJavaScriptEnabled(false);
    webClient.getCookieManager().setCookiesEnabled(true);

    HtmlPage page = (HtmlPage)
    webClient.getPage("https://someencryptedpage.com");
4

1 に答える 1

4

これは、この証明書を信頼していない Java キーストアが原因です。

最も速い解決策は、SSL 例外を無視するように Web クライアントを設定することです。

HtmlUnit 2.11 より前のバージョンの場合:

webClient.setUseInsecureSSL(true); 

HtmlUnit 2.11 以降のバージョンの場合:

webClient.getOptions().setUseInsecureSSL(true);

HtmlUnit javadocは次のとおりです。

何らかの理由で、証明書のステータスを無視するのではなく、信頼できるように証明書を管理したい場合は、証明書をキーストアにインポートできますが、証明書が変更/更新された場合などにメンテナンスが必要になる場合があります。証明書をキーストアに追加します。ここでいくつかのポインタ

于 2012-11-24T10:30:10.853 に答える