首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Java中使用HTMLUnit中的非标准接口时,SSL验证失败

在Java中使用HTMLUnit中的非标准接口时,SSL验证失败
EN

Stack Overflow用户
提问于 2012-11-24 00:39:32
回答 1查看 2.5K关注 0票数 3

作为前言,这是我用Java编写的第一个程序,对于我可能犯下的任何格式错误,我深表歉意。我在我的单元测试程序中遇到了麻烦。我无法使用默认接口,因此我将请求设置为在不同的本地地址上发出。但是,当我这样做时,SSL就不再起作用了。这是我在执行程序时收到的回溯。我正在寻找一些方法,使非默认接口(在我的情况下eth1)上的请求,并有安全套接字层工作。

代码语言:javascript
运行
复制
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)

--

代码语言:javascript
运行
复制
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");
EN

回答 1

Stack Overflow用户

发布于 2012-11-24 18:30:11

这是由不信任此证书的java密钥库引起的。

最快的解决方案是将Webclient设置为忽略SSL异常:

对于HtmlUnit 2.11之前的版本:

代码语言:javascript
运行
复制
webClient.setUseInsecureSSL(true); 

对于HtmlUnit 2.11及更高版本:

代码语言:javascript
运行
复制
webClient.getOptions().setUseInsecureSSL(true);

下面是HtmlUnit javadoc

如果由于某些原因,你想要管理证书,而不是忽略它的状态,你可以将它导入到你的密钥库中,但这可能需要维护,例如,如果证书被更改/续订:将证书添加到密钥库。这里有一些pointers

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13532913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档