微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 使用restTemplate时需要忽略证书

我正在向以下地址发送请求.证书无效,我想忽略它.我根据我在 1,2的研究写了以下代码,但是我无法完成.我正在使用Java 1.7,
https://api.stubhubsandBox.com/search/catalog/events/v3

private static final TrustManager[] UNQUESTIONING_TRUST_MANAGER = new TrustManager[]{
    new x509trustmanager() {
        public java.security.cert.X509Certificate[] getAcceptedissuers(){
            return null;
        }
        public void checkClientTrusted( X509Certificate[] certs,String authType ){}
        public void checkServerTrusted( X509Certificate[] certs,String authType ){}
        public void checkClientTrusted(
                java.security.cert.X509Certificate[] arg0,String arg1)
                throws CertificateException {
            // Todo Auto-generated method stub

        }
        public void checkServerTrusted(
                java.security.cert.X509Certificate[] arg0,String arg1)
                throws CertificateException {
            // Todo Auto-generated method stub

        }
    }
};

public static void main(String[] args) {
    TrustStrategy acceptingTrustStrategy = 

    SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom()
            .loadTrustMaterial(null,acceptingTrustStrategy)
            .build();

    SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext);

    CloseableHttpClient httpClient = HttpClients.custom()
            .setSSLSocketFactory(csf)
            .build();

    HttpComponentsClientHttpRequestFactory requestFactory =
            new HttpComponentsClientHttpRequestFactory();

    requestFactory.setHttpClient(httpClient);

    RestTemplate restTemplate = new RestTemplate(requestFactory);
    String url = "https://api.stubhubsandBox.com/search/catalog/events/v3";
    RestTemplate rest = new RestTemplate();
    Map<String,String> mvm = new HashMap<String,String>();
    mvm.put("Authorization","Bearer TOKEEEEEEEN");
    Object object = rest.postForObject(url,null,Object.class,mvm);
    System.err.println("done");


}

解决方法

您可能已经注意到,Spring的RestTemplate将所有与HTTP(S)相关的内容委托给ClientHttpRequestFactory的底层实现.由于您使用基于HttpClient的实现,以下是有关如何为内部HttpClient实现此功能的几个有用的SO链接

> Ignoring SSL certificate in Apache HttpClient 4.3
> How to ignore SSL certificate errors in Apache HttpClient 4.0

显然,自4.4版以来,可以这样做:

CloseableHttpClient httpClient = HttpClients.custom().setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE).build();

原文地址:https://www.jb51.cc/java/123396.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐