• resttemplate 调用https 出错 unable to find valid certification path to requested target


    resttemplate 调用https使用下面代码:

    @Bean
    @Primary
    public RestTemplate restTemplate(ClientHttpRequestFactory httpRequestFactory) {
    return new RestTemplate(httpRequestFactory);
    }

    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
    SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
    //单位为ms
    factory.setReadTimeout(10 * 1000);
    //单位为ms
    factory.setConnectTimeout(30 * 1000);
    return factory;
    }
    调用没有证书的https出现的错误

    org.springframework.web.client.ResourceAccessException: I/O error on POST request for "https://gateway.fat.demo.com/service-commodity/providerInventory/queryInventory": sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target; nested exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

    修改为下面的java代码后,一切OK:

    @Primary
    @Bean
    public RestTemplate restTemplate() {
    return new RestTemplate(generateHttpsRequestFactory());
    }

    public HttpComponentsClientHttpRequestFactory generateHttpsRequestFactory() {
    try {
    TrustStrategy acceptingTrustStrategy = (x509Certificates, authType) -> true;
    SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy).build();
    SSLConnectionSocketFactory connectionSocketFactory =
    new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier());

    HttpClientBuilder httpClientBuilder = HttpClients.custom();
    httpClientBuilder.setSSLSocketFactory(connectionSocketFactory);
    CloseableHttpClient httpClient = httpClientBuilder.build();
    HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
    factory.setHttpClient(httpClient);
    factory.setConnectTimeout(10 * 1000);
    factory.setReadTimeout(30 * 1000);
    return factory;
    } catch (Exception e) {
    log.error("创建HttpsRestTemplate失败", e);
    throw new RuntimeException("创建HttpsRestTemplate失败", e);
    }

    }

  • 相关阅读:
    kali linux 2019.1 替换burpsuite pro 1.7.37
    java反序列化漏洞实战
    我是一个997程序员
    清晨小悟
    vue webpack配置Error
    USSD 杂记
    WingMoney APP逆向,实现自动话费充值
    保持空杯心态
    解决python在命令行中运行时导入包失败,出现错误信息 "ModuleNotFoundError: No module named ***"
    【转】Mac find 去除 “Permission denied” 信息的方法
  • 原文地址:https://www.cnblogs.com/exmyth/p/15815877.html
Copyright © 2020-2023  润新知