【解决】Caused by: javax.net.ssl.SSLHandshakeException: PKIX path building failed

问题原因:

在Java8及高版本以上的版本在源应用程序不信任目标应用程序的证书,因为在源应用程序的JVM信任库中找不到该证书或证书链。也就是目标站点启用了HTTPS 而缺少安全证书时出现的异常

解决方案:

我使用的是忽略证书验证

java 复制代码
public class Base64Util {

    public static String getBase64FromUrl(String fileUrl) {
        InputStream inputStream = null;
        byte[] data = null;
        ByteArrayOutputStream swapStream = null;
        HttpsURLConnection conn = null;
        try {
            URL url = new URL(fileUrl);
            //判断当前文件url是否是https
            if (fileUrl.contains("https:")){
                //是https
                //绕过证书
                SSLContext context = createIgnoreVerifySSL();
                conn = (HttpsURLConnection) url.openConnection();
                conn.setSSLSocketFactory(context.getSocketFactory());
                inputStream = conn.getInputStream();
            }else {
                //当前链接是http
                inputStream =  url.openConnection().getInputStream();
            }

            swapStream = new ByteArrayOutputStream();
            byte[] buff = new byte[100];
            int rc = 0;
            while ((rc = inputStream.read(buff, 0, 100)) > 0) {
                swapStream.write(buff, 0, rc);
            }
            data = swapStream.toByteArray();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            IOUtils.closeQuietly(inputStream);
            IOUtils.closeQuietly(swapStream);
        }
        return new String(Base64.encodeBase64(data));
    }

    //绕过SSL、TLS证书
    public static SSLContext createIgnoreVerifySSL() throws NoSuchAlgorithmException, KeyManagementException {
        SSLContext sc = SSLContext.getInstance("TLS");
        // 实现一个X509TrustManager接口,用于绕过验证,不用修改里面的方法
        X509TrustManager trustManager = new X509TrustManager() {
            @Override
            public void checkClientTrusted(
                    java.security.cert.X509Certificate[] paramArrayOfX509Certificate,
                    String paramString) throws CertificateException {
            }

            @Override
            public void checkServerTrusted(
                    java.security.cert.X509Certificate[] paramArrayOfX509Certificate,
                    String paramString) throws CertificateException {
            }

            @Override
            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                return null;
            }
        };

        sc.init(null, new TrustManager[]{trustManager}, null);
        return sc;
    }
}
相关推荐
2501_915106324 分钟前
如何在 iOS 设备上理解和分析 CPU 使用率(windows环境)
android·ios·小程序·https·uni-app·iphone·webview
Mr.H01278 分钟前
Linux常见压缩命令
linux·服务器·数据库
我是一只小青蛙88812 分钟前
Python文件组织:路径抽象到安全归档
java·服务器·前端
鸠摩智首席音效师12 分钟前
如何在 Linux 中使用 sort 命令排序 ?
linux·运维·服务器
Lenyiin16 分钟前
《 Linux 修炼全景指南: 十三 》环境变量
linux·运维·服务器
源代码•宸26 分钟前
Golang原理剖析(interface)
服务器·开发语言·后端·golang·interface·type·itab
txinyu的博客29 分钟前
手写 C++ 高性能 Reactor 网络服务器
服务器·网络·c++
csdn_life181 小时前
antiX Linux 23 安装源,Debian 12 轻量级 发行版 命令行安装
linux·运维·服务器
weixin_440730501 小时前
03功能测试实战
服务器·功能测试·p2p
尼古拉斯·纯情暖男·天真·阿玮1 小时前
实验七 防火墙与入侵防护实验
linux·服务器·网络