解决java unable to find valid certification path to requested target

在项目中导入下面java工具类


/**
 * @Description:
 */
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
public class SslUtils {

    private static void trustAllHttpsCertificates() throws Exception {
        TrustManager[] trustAllCerts = new TrustManager[1];
        TrustManager tm = new miTM();
        trustAllCerts[0] = tm;
        SSLContext sc = SSLContext.getInstance("SSL");
        sc.init(null, trustAllCerts, null);
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    }
    static class miTM implements TrustManager,X509TrustManager {
        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }
        public boolean isServerTrusted(X509Certificate[] certs) {
            return true;
        }
        public boolean isClientTrusted(X509Certificate[] certs) {
            return true;
        }
        public void checkServerTrusted(X509Certificate[] certs, String authType)
                throws CertificateException {
            return;
        }
        public void checkClientTrusted(X509Certificate[] certs, String authType)
                throws CertificateException {
            return;
        }
    }
    /**
     * 信任所有SSL证书,忽略HTTPS请求的SSL证书,必须在openConnection之前调用
     * @throws Exception
     */
    public static void ignoreSsl() throws Exception{
        HostnameVerifier hv = new HostnameVerifier() {
            public boolean verify(String urlHostName, SSLSession session) {
                System.out.println("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost());
                return true;
            }
        };
        trustAllHttpsCertificates();
        HttpsURLConnection.setDefaultHostnameVerifier(hv);
    }

在需要调用https 忽略ssl验证的请求之前,调用

SslUtils.ignoreSsl();

问题得到解决

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当您遇到 "unable to find valid certification path to requested target" 错误时,这意味着您的Java应用程序或Maven无法在与远程服务器建立安全连接时验证服务器的证书。这通常是由于服务器的证书未被Java信任所导致的。 解决此问题的一种方法是下载服务器的证书,并将其导入到Java的信任存储中。这可以通过以下步骤完成: 1. 首先,使用浏览器访问您的目标服务器,并导航到安全连接的网页(https)。 2. 点击浏览器地址栏旁边的锁图标(通常是绿色的),然后选择"证书"或"详细信息"。 3. 在证书详细信息中,找到并选择"导出证书"选项。 4. 选择一个文件名和位置,将证书保存为PEM格式的文件(.cer或.crt扩展名)。 5. 接下来,打开命令提示符或终端,并使用以下命令将证书导入到Java的信任存储中: keytool -import -alias <别名> -file <证书文件路径> -keystore <信任存储路径> 请注意,<别名>是您给证书起的名称,<证书文件路径>是您保存证书的位置,<信任存储路径>是Java的信任存储文件(通常是cacerts)的路径。 您可能需要输入信任存储的密码才能完成此操作。 6. 在导入证书后,重新运行Java应用程序或Maven命令,应该不再报“unable to find valid certification path to requested target”错误。 请注意,忽略证书验证可能会带来安全风险,因此请仅在开发或测试环境中使用此选项,并确保在生产环境中使用受信任的证书。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值