`
lihuifen2014
  • 浏览: 26154 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

HTTPS连接时出现PKIX path building failed的解决方法

    博客分类:
  • http
 
阅读更多

一、HTTPS连接时出现PKIX path building failed问题

原因:网站进行HTTPS连接时网站根证书出错而报的错

解决方法:

第一种方法:进行安全证书的下载及导入-----------传统办法,优点是安全性高,缺点是网站若更换证书,还得重新下载和导入,不够灵活

第二种方法:进行无信任证书连接,自己实现对网站证书的免验证通过-----------另辟蹊径,优点是灵活,不用担心网站证书的更换或过期等导致系统问题,缺点是有一点风险(其实可以忽略),推荐采用第二种方法,具体实现案例如下。

二、无信任证书连接的实现

在微博实名认证时需要与第三方平台进行https通信,对方因更换网站安全证书,导致通行证系统连接失败,经研究发现原有方法(采用org.codehaus.xfire.transport.http.EasySSLProtocolSocketFactory)不适用新的安全证书验证规范,因此将其进行改进,变为对无证书网站进行https连接时进行无条件信任通过,以避免日后再出现因安全证书更换而导致的系统问题。

原有连接方式:(采用org.codehaus.xfire.transport.http.EasySSLProtocolSocketFactory)

对EasySSLProtocolSocketFactory的解释(网上来源),关键词:自注册证书、不应使用在生产环境

ProtocolSocketFactory easy = new EasySSLProtocolSocketFactory();

Protocol protocol = new Protocol("https", easy, 443);

Protocol.registerProtocol("https", protocol);

//构造HttpClient的实例 
HttpClient httpClient = new HttpClient();

httpClient.getHostConfiguration().setHost("auth.cnidrz.cn", 443, protocol);

httpClient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");

//创建GET方法的实例 
GetMethod getMethod = new GetMethod(url);

try{ 
   //执行getMethod 
   BindPersonalId_DirectAction.trustAllHttpsCertificates();//先执行一遍这个使得网站被信任
   int statusCode = httpClient.executeMethod(getMethod); 
   if (statusCode != HttpStatus.SC_OK) { 
   System.err.println("Method failed: " 
   + getMethod.getStatusLine()); 
   }
   //读取内容 
   temp_id = getMethod.getResponseBodyAsString();
   }catch(Exception e){
     e.printStackTrace();
     throw new Exception("认证失败,原因:[认证系统异常].");
   }finally{ 
   //释放连接 
     getMethod.releaseConnection(); 
   }

现有连接方式:(采用实现X509TrustManager接口方法)

HttpClient httpClient = new DefaultHttpClient(); //创建默认的httpClient实例 
X509TrustManager xtm = new X509TrustManager(){ //创建TrustManager 
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {} 
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {} 
public X509Certificate[] getAcceptedIssuers() { return null; } 
}; 
try { 
//TLS1.0与SSL3.0基本上没有太大的差别,可粗略理解为TLS是SSL的继承者,但它们使用的是相同的SSLContext 
SSLContext ctx = SSLContext.getInstance("SSL");  -----------------注意:经测试发现,这里必须是"SSL"实例而非“TLS”,具体原因还不清楚

//使用TrustManager来初始化该上下文,TrustManager只是被SSL的Socket所使用 
ctx.init(null, new TrustManager[]{xtm}, null); 

//创建SSLSocketFactory 
SSLSocketFactory socketFactory = new SSLSocketFactory(ctx); 

//通过SchemeRegistry将SSLSocketFactory注册到我们的HttpClient上 
httpClient.getConnectionManager().getSchemeRegistry().register(new Scheme("https", socketFactory, 443)); 
httpClient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");

//创建HttpGet方法的实例 
HttpGet httpGet = new HttpGet(url); //创建HttpPost 
HttpResponse response = httpClient.execute(httpGet); 

//执行 
if(response.getStatusLine().getStatusCode() == 200) 

  //读取内容 
  HttpEntity entity = response.getEntity(); //获取响应实体 
  if (null != entity) { 
  temp_id = EntityUtils.toString(entity, "UTF-8"); 

}else{
  System.out.println("获取temp_id时,认证平台发生内部错误!!");
}
}catch(Exception e){
  e.printStackTrace();
  throw new Exception("认证失败,原因:[认证系统异常].");
}finally{ 
  //释放连接 
  httpClient.getConnectionManager().shutdown(); //关闭连接,释放资源 
}

分享到:
评论

相关推荐

    解决PKIX path building failed的问题

    7. **源码分析**:通过查看`AbstractCasProtocolUrlBasedTicketValidator`的源码,我们可以了解它是如何处理HTTPS连接的,以及它如何处理证书验证错误,比如“PKIX path building failed”。可能的优化点包括自定义...

    SSL.7z,解决PKIX path building failed 的问题

    PKIX path building failed 的问题。解决本地环境中报错 PKIX path building failed 的问题。 其中有产生证书的代码,将运行产生的证书放在文档中指定位置即可

    解决PKIX path building failed的问题的AbstractCasProtocolUrlBasedTicketValidator类

    CAS默认走https,需要安装证书,但是自定义的证书貌似得不到信任,报PKIX path building failed。则可以修改源码来屏蔽错误。

    PKIX path building failed

    sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

    PKIX path building failed解决java获取https的时遇到的证书问题

    ### PKIX Path Building Failed 解决Java获取HTTPS时遇到的证书问题 #### 一、问题概述 在使用Java程序访问HTTPS网站时,有时会遇到以下异常: ```plaintext javax.net.ssl.SSLHandshakeException: sun.security....

    验证证书unable to find valid certification path to requested target

    当在Java中使用URL.openConnection().connect()方法进行HTTPS请求时,如果遇到PKIX path building failed异常,通常意味着Java运行环境在验证服务器证书链时遇到了问题。具体错误信息sun.security.provider....

    InstallCert.java工具及使用方法.zip

    HTTP Status 500 - javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find ...

    关于IDEA2020.1新建项目maven PKIX 报错问题解决方法

    这个错误的主要原因是ValidatorException:PKIX path building failed : sun.security.provider.certpath.SunCertPathBuilderException : unable to find valid certification path to requested target。...

    Maven 环境搭建和ecplise配置

    Maven是一个强大的项目管理工具,它帮助Java开发者管理和构建项目,统一项目的构建过程,解决依赖管理问题。以下是如何在Windows环境下搭建Maven的基本步骤: 1. **下载Maven**:首先,你需要访问Apache Maven的...

    SELINUX的使用

    X Window System是大多数Linux桌面环境(如GNOME和KDE)的基础图形引擎,负责管理显示、绘制窗口、光标以及其他GUI元素,同时还处理鼠标和键盘事件,为用户提供基本的剪贴板和拖放支持。作为用户空间程序,XORG在...

    jssecacerts

    Java\jar 1.8.0_141\lib\ext\里面缺少了一个安全凭证jssecacerts证书文件,通过运行下面类可以生成证书,将生成的证书放在Java\jar 1.8.0_141\lib\ext\这个目录下,重启编译器就可以解决。

    PKIX_maven_archetype.rar

    二是尝试更新POM.xml中的JAR依赖时,出现“PKIX path building failed”的错误。 首先,我们来讨论Maven Archetype。Maven Archetype是Maven的一个插件,用于创建项目结构的模板。它允许开发者定义一个标准的项目...

    InstallCert.zip

    当Maven在尝试连接到中央库(如Maven Central Repository或JCenter)时,如果遇到未信任的证书,就会抛出“PKIX path building failed”这样的错误。 错误消息“unable to find valid certification path to ...

    InstallCert.class

    解决 sun.security.validator.ValidatorException: PKIX path building failed生成证书的代码

    https解决SSLHandshakeException问题.zip

    在Android应用开发中,安全通信是至关重要的,尤其是在处理敏感用户数据时,如登录凭据、个人信息等。HTTPS(Hypertext Transfer Protocol Secure)是一种基于HTTP的安全协议,它通过SSL/TLS(Secure Sockets Layer/...

    Trusted Path Debugger:用于 PKIX 路径构建的 Java 调试器失败错误-开源

    在 Java 中,在进行 HTTPS 连接时,人们通常会遇到以下异常堆栈跟踪: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider....

    InstallCert.jar

    解决jdk证书问题 生成jssecacerts PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilde... 具体操作可参考:https://blog.csdn.net/Asia1752/article/details/119675793

    gradle-trust-all:一个用于禁用 SSL 证书验证的 gradle 插件

    PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 处理这种情况的常用 Java 方法是下载站点证书,将其导入...

    关于用javamail发送邮件时,由于邮件服务器要SSL,解决办法

    当邮件服务器需要自签名证书时,可能会出现“sun.security.validator.ValidatorException: PKIX path building failed”这样的错误。为了解决这个问题,我们可以使用`InstallCert.java`这个工具。这是一个简单的Java...

    java 发送https 请求 证书

    Java的TrustStore包含了系统信任的根证书,如果服务器的证书不在这个TrustStore中,Java会抛出“ sun.security.validator.ValidatorException: PKIX path building failed”这样的异常。以下是一些步骤来处理这个...

Global site tag (gtag.js) - Google Analytics