PKIX path building failed

目标URL开启了证书验证。怎么改?方法是在发送的请求那里设置证书忽略(思路是这样的,我现在的方法是当前使用的,未来也许不适用,但是思路没错)

在这里我发送http请求的工具是RestTemplate,我们需要自己设置一下RestTemplate证书忽略。

@Configuration
public class RestTemplateConfig
{


    private Integer connectTimeout = 300000;


    private Integer readTimeout = 300000;

    @Bean("sslRestTemplate")
    public RestTemplate RestTemplate()
    {

        SimpleClientHttpRequestFactory httpRequestFactory = new SimpleClientHttpRequestFactory();
        httpRequestFactory.setConnectTimeout(connectTimeout);
        httpRequestFactory.setReadTimeout(readTimeout);

        return new RestTemplate(httpRequestFactory);
    }

    /**
     * 用于https请求,忽略认证
     *
     * @return unSSLRestTemplate
     */
    @Bean("unSSLRestTemplate")
    @Primary
    public RestTemplate restTemplateHttps()
    {
        RestTemplate restTemplate = null;
        try
        {

            SSL factory = new SSL();

            factory.setConnectTimeout(connectTimeout);
            factory.setReadTimeout(readTimeout);

            restTemplate = new RestTemplate(factory);

            //解决乱码
            List<HttpMessageConverter<?>> httpMessageConverters = restTemplate.getMessageConverters();
            httpMessageConverters.stream().forEach(httpMessageConverter ->
            {
                if (httpMessageConverter instanceof StringHttpMessageConverter)
                {
                    StringHttpMessageConverter messageConverter = (StringHttpMessageConverter) httpMessageConverter;
                    messageConverter.setDefaultCharset(Charset.forName("UTF-8"));
                }
            });
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return restTemplate;
    }
}

这里的SSL文件如下:

public class SSL extends SimpleClientHttpRequestFactory {

	@Override
	protected void prepareConnection(HttpURLConnection connection, String httpMethod)
			throws IOException {
		if (connection instanceof HttpsURLConnection) {
			prepareHttpsConnection((HttpsURLConnection) connection);
		}
		super.prepareConnection(connection, httpMethod);
	}

	private void prepareHttpsConnection(HttpsURLConnection connection) {
		connection.setHostnameVerifier(new SkipHostnameVerifier());
		try {
			connection.setSSLSocketFactory(createSslSocketFactory());
		}
		catch (Exception ex) {

		}
	}

	private SSLSocketFactory createSslSocketFactory() throws Exception {
		SSLContext context = SSLContext.getInstance("TLS");
		context.init(null, new TrustManager[] { new SkipX509TrustManager() },
				new SecureRandom());
		return context.getSocketFactory();
	}

	private class SkipHostnameVerifier implements HostnameVerifier {

		@Override
		public boolean verify(String s, SSLSession sslSession) {
			return true;
		}

	}

	private static class SkipX509TrustManager implements X509TrustManager {

		@Override
		public X509Certificate[] getAcceptedIssuers() {
			return new X509Certificate[0];
		}

		@Override
		public void checkClientTrusted(X509Certificate[] chain, String authType) {
		}

		@Override
		public void checkServerTrusted(X509Certificate[] chain, String authType) {
		}

	}

}

这样配置完的RestTemplate就可以发送忽略证书的请求。

原文取自:Springboot 使用RestTemplate 跳过SSL证书验证完成请求_springboot 绕过ssl-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值