文档中心
关于openapi升级安全能力的通知
更新时间: 2021-12-28 21:23:52 访问次数:437

尊敬的开发者:

您好

我们将在本周四(2021年12月30日22:00)升级openapi的安全防护能力,与此同时,我们发现了一些个别问题,在升级后,个别用户出现了调用https资源时报错,
java程序在访问https资源时,出现报错:
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: 

unable to find valid certification path to requested target

这本质上,是java在访问https资源时的证书信任问题。
如何解决这个问题呢?

1 增加忽略证书信任问题的代码

在客户端(调用端)添加逻辑,忽略证书信任问题,下面贴下该方法对应的代码。

HostnameVerifier hv = new HostnameVerifier() {

public boolean verify(String urlHostName, SSLSession session) {

System.out.println("Warning: URL Host: " + urlHostName + " vs. "

+ session.getPeerHost());

return true;

}

};

private static void trustAllHttpsCertificates() throws Exception {

javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];

javax.net.ssl.TrustManager tm = new miTM();

trustAllCerts[0] = tm;

javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext

.getInstance("SSL");

sc.init(null, trustAllCerts, null);

javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc

.getSocketFactory());

}

static class miTM implements javax.net.ssl.TrustManager,

javax.net.ssl.X509TrustManager {

public java.security.cert.X509Certificate[] getAcceptedIssuers() {

return null;

}

public boolean isServerTrusted(

java.security.cert.X509Certificate[] certs) {

return true;

}

public boolean isClientTrusted(

java.security.cert.X509Certificate[] certs) {

return true;

}

public void checkServerTrusted(

java.security.cert.X509Certificate[] certs, String authType)

throws java.security.cert.CertificateException {

return;

}

public void checkClientTrusted(

java.security.cert.X509Certificate[] certs, String authType)

throws java.security.cert.CertificateException {

return;

}

}

以上只是针对java的解决方案,基本思路就是忽略证书信任的问题,让程序信任所有证书,其他语言可以根据这个思路来调整。


2 修改hosts文件(临时解决办法)

通过修改服务器上的hosts文件,将openapi.winit.com.cn的解析指向回旧的系统,此方法可以临时解决,作为调整代码前的临时过渡方案。

1,备份文件

\cp -ra /etc/hosts /etc/hosts.last

2,vi /etc/hosts

增加如下内容:

139.9.42.71 openapi.winit.com.cn

3,输入:wq

4,验证:出现下面的类似返回()

ping openapi.winit.com.cn

保存后即可。


关键词