admin管理员组文章数量:1567253
linux服务器下解决SSL证书不受信的问题
- linux服务器下解决SSL证书不受信的问题
- 安装SSL证书安装到jdk证书库
- 第二种代码层面忽略证书信任问题。
你好! 这是你的第一篇博文,以后就在这里和大家交流和学习喽。
linux服务器下解决SSL证书不受信的问题
java应用程序下访问第三方服务,调用https服务时,本地不报错,服务器报javax.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证书到jdk证书库,第二种是忽略SSL证书信任。
安装SSL证书安装到jdk证书库
1.在google浏览器,访问第三方接口域名,在设置中,查找对应的证书, 导出到本地,具体可以参考https://jingyan.baidu/article/90895e0f34fad464ec6b0b1e.html
2.安装证书
查找 jdk安装位置 echo $JAVA_HOME
cd /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64
进入证书库
cd /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151- 1.b12.el7_4.x86_64/jre/lib/security
执行命令:
cd /usr/java/jre1.8.0_73/lib/security/
keytool -import -alias 证书名 -keystore cacerts -file 证书路径/对应的域名.cer -trustcacerts
此时命令行会提示你输入cacerts证书库的密码,你敲入changeit就行了,这是java中cacerts证书库的默认密码。
第二种代码层面忽略证书信任问题。
上代码:
package com.linkGap.baobei.utils;
import javax.ssl.*;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
/**
-
@Description 解决忽略SSL证书问题
-
@Date 20/12/1 下午4:49
-
@Version 1.0
**/
public class IgnoreSSL {private static void trustAllHttpsCertificates() throws Exception {
TrustManager[] trustAllCerts = new TrustManager[1];
TrustManager tm = new MyTM();
trustAllCerts[0] = tm;
SSLContext sc = SSLContext.getInstance(“SSL”);
sc.init(null, trustAllCerts, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
}static class MyTM implements TrustManager, X509TrustManager {
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}public boolean isServerTrusted(X509Certificate[] certs) { return true; } public boolean isClientTrusted(X509Certificate[] certs) { return true; } @Override public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException { return; } @Override public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException { return; }
}
/**
- 忽略HTTPS请求的SSL证书,必须在openConnection之前调用
- @throws Exception
*/
public static void ignoreSsl() throws Exception{
HostnameVerifier hv = new HostnameVerifier() {
@Override
public boolean verify(String urlHostName, SSLSession session) {
return true;
}
};
System.out.println(“忽略HTTPS请求的SSL证书”);
trustAllHttpsCertificates();
HttpsURLConnection.setDefaultHostnameVerifier(hv);
}
}
在调用HTTPConnection之前执行执行IgnoreSSL.ignoreSsl();就解决问题了,代码亲测有用
欢迎大家参考,指正评论
版权声明:本文标题:linux服务器下解决SSL证书不受信的问题,这一篇就够了 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1725725757a1038933.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论