Java 设置信任所有的SSL证书(完美解决PKIX path building failed问题)

本文介绍了一种在Java中使所有SSL证书都被信任的简便方法,通过创建并实现X509HostnameVerifier类,以及设置SSLContext来绕过证书验证,适用于网络通信遇到证书不被信任的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java 设置信任所有的SSL证书

简介

在一次使用Java进行网络通信的时候,出现了请求失败的问题,然后发现报错如下:

PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)

就是我们的SSL证书不被信任,网上有一些解决方法就是重新生成一个新的SSL证书然后加入到secure目录下,但是这样太麻烦了。可以通过以下方法简单解决!
参考这位大佬的博客。但是他的方法有个地方现在不能用了,所以就改了一下,可以完美解决。

解决方案

1、首先创建一个类继承X509HostnameVerifier这个抽象类(或者直接在代码里面写个匿名类也可以),然后实现有返回值的那个verify函数,直接返回true即可,其他的空实现即可。如下:

X509HostnameVerifier hostnameVerifier = new X509HostnameVerifier() {
                @Override
                public void verify(String s, SSLSocket sslSocket) throws IOException {

                }

                @Override
                public void verify(String s, X509Certificate x509Certificate) throws SSLException {

                }

                @Override
                public void verify(String s, String[] strings, String[] strings1) throws SSLException {

                }

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

然后作如下设置就可以了:

SSLContext sslContext = SSLContextBuilder.create().useProtocol(SSLConnectionSocketFactory.SSL).loadTrustMaterial((x, y) -> true).build();
RequestConfig config = RequestConfig.custom().setConnectTimeout(5000).setSocketTimeout(5000).build();
httpClient = HttpClientBuilder.create().setSslcontext(sslContext).setDefaultRequestConfig(config).setHostnameVerifier(hostnameVerifier).build();
       
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值