WebService系列之Axis Https(SSL)证书校验错误处理方法

最近在用Axis调用https的接口,抛出异常:

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

异常原因是ssl证书校验失败,因为自己网站是http的,对方公司是https的接口,所以证书校验失败,处理方法是在网上找的一个不错的方法,思路是重写一个不验证证书的SocketFactory,Axis默认SocketFactory,会对server端的证书进行验证,导致验证异常

package com.common.utils.web;import org.apache.axis.components.net.BooleanHolder;
import org.apache.axis.components.net.JSSESocketFactory;
import org.apache.axis.components.net.SecureSocketFactory;import javax.net.ssl.*;
import java.io.IOException;
import java.net.Socket;
import java.security.KeyStore;
import java.util.Hashtable;import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;/*** <pre>*    Axis自定义JSSESocketFactory* </pre>** <pre>* @author mazq* 修改记录*    修改后版本:     修改人:  修改日期: 2020/12/12 14:44  修改内容:* </pre>*/
public class WSTLSSocketSecureFactory extends JSSESocketFactory implements SecureSocketFactory {public WSTLSSocketSecureFactory(Hashtable attributes) {super(attributes);}@Overridepublic Socket create(String host, int port, StringBuffer otherHeaders, BooleanHolder useFullURL)throws Exception{Socket s = super.create(host, port, otherHeaders, useFullURL);((SSLSocket)s).setEnabledProtocols(new String[] {"SSLv2Hello", "SSLv3", "TLSv1"});return s;}@Overrideprotected void initFactory() throws IOException {SSLContext context = null;try {context = getContext();} catch (Exception e) {e.printStackTrace();}this.sslFactory = context.getSocketFactory();}protected SSLContext getContext() throws Exception {KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {public X509Certificate[] getAcceptedIssuers() {return null;}public void checkClientTrusted(X509Certificate[] certs, String authType) {// Trust always}public void checkServerTrusted(X509Certificate[] certs, String authType) {// Trust always}}};// Install the all-trusting trust managerSSLContext sslContext = SSLContext.getInstance("SSL");// Create empty HostnameVerifierHostnameVerifier hv = new HostnameVerifier() {public boolean verify(String arg0, SSLSession arg1) {return true;}};sslContext.init(null, trustAllCerts, new java.security.SecureRandom());return sslContext;}
}

客户端调用时设置setProperty:

 // 支持Https Webservice接口调用
AxisProperties.setProperty("axis.socketSecureFactory", WSTLSSocketSecureFactory.class.getName());

注意点,不同版本jdk对TLS验证是有差别的:oracle官网博客Diagnosing TLS, SSL, and HTTPS列出了差别

补充知识点:

  • SSL:SSL 是“Secure Sockets Layer”的缩写,是在上世纪90年代中期,由网景公司设计的
  • TLS:IETF 就在那年把 SSL 标准化。标准化之后的名称改为 TLS(是“Transport Layer Security”的缩写),中文叫做“传输层安全协议”

WebService系列之Axis Https(SSL)证书校验错误处理方法相关推荐

  1. 解决ImageLoader加载HTTPS图片证书校验异常问题

    解决ImageLoader加载HTTPS图片证书校验异常问题 参考文章: (1)解决ImageLoader加载HTTPS图片证书校验异常问题 (2)https://www.cnblogs.com/cs ...

  2. python sanic 设置ssl证书_配置自签https ssl证书

    由于人们越来越重视网络安全,所以很多平台及系统都要求使用https方式接入.而且一些开源服务框架在调用时也只接受https请求,这将导致平时开发/测试时需要用到ssl证书的地方越来越多. 在2016年 ...

  3. https ssl证书的工作原理及使用相关知识收集

    https ssl证书的工作原理及使用相关知识收集 SSL 与 数字证书 的基本概念和工作原理 前言 SSL是让人头大的东西,看起来很复杂,我学过信息安全课,但是对SSL仍然是模糊一片.对于数字证书也 ...

  4. 第52章 HTTPS SSL证书与Data Protection(数据安全)

    HTTPS SSL证书 在使用Visual Studio .Net(Core)进行Web开发时,当前第一调试Web程序时会为Visual Studio中的Web项调试所使用的IIS Express提供 ...

  5. 解决 Let’s Encrypt SSL 证书配置错误

    解决 Let's Encrypt SSL 证书配置错误"DNS problem: NXDOMAIN looking up A for xxx.com" 一.问题:Let's Enc ...

  6. SSL证书常见错误及解决办法

    SSL错误是一种常见的网络通信问题,可能会对用户的网络使用造成一定的影响.解决SSL错误的方法相对比较简单,但用户需要保持高度警惕,远离那些不安全的网站,以保护自己的网络安全和隐私.同时,网站也需要严 ...

  7. GoDaddy万用https ssl证书如何通过DNS审核

    申请GoDaddy 的wildcard ssl 证书,如何通过他家的审核? https://www.godaddy.com/help/verifying-your-domain-ownership-f ...

  8. [转]hexo 博客开启 https (SSL 证书)

    本文首发于我的个人博客:https://staunchkai.com 我的服务器是腾讯云的,域名是阿里云的,这篇文章用于记录 Hexo 博客开启 https 的过程. 获取证书 这里的 SSL 证书 ...

  9. Nginx配置https(ssl证书)并反向代理Springboot Jar项目

    下载安装NGINX # 下载NGINX: yum install nginx # 启动nginx: systemctl start nginx # 加入开机启动: systemctl enable n ...

最新文章

  1. js:深入prototype(下:原型重写)
  2. 蛋花花简单阐述HTML5和Web前端的区别
  3. 算法—2,记一个自己的算法题 计算数字k在0到n中的出现的次数,k可能是0~9的一个值
  4. python中的迭代器,生成器,闭包,装饰器,@property
  5. 负载均衡研究 基础
  6. 笨办法学 Python · 续 练习 36:简单的计算器
  7. OpenShift 4 - DevSecOps Workshop (11) - 通过Trigger启动Pipeline运行
  8. python+requests进行get、post方法接口测试
  9. Oracle中的rownum不能使用大于的问题
  10. zabbix中文乱码的三种解决办法
  11. 【软工】week3-个人阅读作业-软件案例分析
  12. Activity工作流
  13. 1229: 求三个数的平均数
  14. 應用高解析度線掃描CCD於ITO導電玻璃表面瑕疵檢測之研究
  15. Python小结<1>
  16. Odoo16 主题推荐
  17. 魔兽争霸3在win10中调节亮度的办法
  18. 2021河南科技大学计算机考研科目,2021河南科技大学考研参考书目
  19. Linux 离线安装 autoformat
  20. 多种数据库连接工具_20多种热门数据工具及其不具备的功能

热门文章

  1. java 四级联动_四级联动
  2. oracle ons offline 服务启动失败
  3. Barn Repair 修理牛棚,java解题
  4. Microsoft Store打不开, 解决方法
  5. 浏览器开发者模式获取页面元素
  6. 计算机鼠标不灵活怎么办,鼠标右键不灵敏怎么办?快速解决方法(1分钟解决)...
  7. 安全度过试用期的四大“防身术”,了解防吃亏!
  8. 基于ensp设计三层校园网络
  9. 51单片机ds18b20
  10. 小米笔记本pro开机出现no bootable devices