如何在java中为apache httpclient库创建自己的信任管理器来忽略apache httpclient 4.2中的证书?

时间:2013-02-19 10:45:25

标签: java web-services httpclient apache-httpclient-4.x

有人可以告诉我如何在Web服务调用期间忽略ssl证书。 我正在调用https weburl来获取api响应,但是获得了peer not authenticated错误。 旧示例不起作用,因为某些方法已被弃用,因此有人可以告诉我/提供一些示例代码,以便我不会收到此错误。

我刚才知道问题是由证书引起的。 我正在使用第三方API进行db调用&他们的域名有ssl证书 即www.dbprovider.com(SSL证书是* .dbprovider.com) &安培;他们为我们创建了一个类似myapp.dbprovider.com的子域名

所以现在问题是当我尝试命中

时没有可用的对等证书
openssl s_client -ssl3 -showcerts -connect myapp.dbprovider.com:443

openssl s_client -tls1 -showcerts -connect myapp.dbprovider.com:443

有人可以告诉我现在应该怎么做。是否有任何对dbprovider站点的控制,以便他们可以为我提供一些配置,或者我必须编写代码来忽略他们的证书(但是为了忽略证书,我们没有得到他们的同行证书)

1 个答案:

答案 0 :(得分:0)

使用此处所述的自定义SSLSocketFactoryhttp://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html#d5e512。一个忽略自签名证书的工厂是EasySSLProtocolSocketFactory

  ProtocolSocketFactory factory = new EasySSLProtocolSocketFactory();
  try {
    URI uri = new URI(config.getBaseUrl());
    int port = uri.getPort();
    if (port == -1) {
      port = 443;
    }
    Protocol easyHttps = new Protocol(uri.getScheme(), factory, port);
    hostConfiguration.setHost(uri.getHost(), port, easyHttps);
  } catch (URISyntaxException e) {
    throw new IOException("could not parse URI " + config.getBaseUrl(), e);
  }

来源:http://frightanic.com/software-development/self-signed-certificates-in-apache-httpclient/