[ 登录 ] - [ 注册 ] | 免费代理IP 数据无忧_无忧代理IP_DATA5U最新上线 | 代码示例DEMO | IP测试视频 | 用户协议

java调用https服务的ip地址报错证书问题解决:SSLPeerUnverifiedException: Certificate...

作者:数据无忧   时间:2023-08-15 18:07:52
无忧代理IP推广返现活动

这个错误是因为Java在通过HTTPS访问该IP地址的服务时,无法验证该服务证书的有效性和信任性,导致SSL连接失败。


常见的原因有:

  1. 该服务使用的是自签名证书,而非权威CA机构颁发的证书。
  2. 服务证书存在问题,比如过期、域名不匹配等。
  3. Java运行环境没有信任该服务使用的证书颁发机构。
  4. 服务配置问题,未提供完整的证书链。


解决方法是:

  1. 获取该服务的证书文件,导入到Java的证书信任库中,可以通过Keytool命令导入。
  2. 如果是内部服务,可以使用自签名证书,但需要在调用服务前加载证书。
  3. 忽略证书验证,但这会带来安全风险,不推荐。
  4. 联系服务方,使用正规的证书,并正常配置证书链。

修改Java代码解决该问题的方式:

java

Copy code

// 加载证书 CertificateFactory cf = CertificateFactory.getInstance("X.509"); File certFile = new File("/path/to/certificate"); Certificate caCert = cf.generateCertificate(new FileInputStream(certFile)); // 创建SSLContext SSLContext sslContext = SSLContext.getInstance("TLS"); TrustManager[] trustManagers = { new X509TrustManager() { @Override public void checkClientTrusted(X509Certificate[] x509Certificates, String s) {} @Override public void checkServerTrusted(X509Certificate[] x509Certificates, String s) {} } }; sslContext.init(null, trustManagers, null); // 使用自定义的SSLContext SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory( sslContext, NoopHostnameVerifier.INSTANCE ); HttpClient httpClient = HttpClient.newBuilder() .sslSocketFactory(socketFactory, (X509HostnameVerifier) null) .build();


这种方式可以跳过证书验证,解决报错问题。但也可以根据需要调整,只信任指定的证书。


福利:现在通过开发者购买代理IP,购买后联系客服最高可获   返现20%   到你的支付宝(最低35元,最高1440元)
无忧代理IP(www.data5u.com)原创文章,转载请注明出处。

微信公众号
关注微信公众号