JDK7导入证书

起因,在认证SSO过程中需要调用https时报错:

javax.net.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证书过期或者失效了

我们以百度为例,先打开百度网站
依次点击,图标可能会有所不同,image.png
image.png
image.png
然后默认导出即可,文件名自定义
接下来就是导入操作了
打开JDK的目录,%JAVA_HOME%/jre/lib/security,在此目录打开控制台,输入命令,这里我分别演示两种情况,我用同样的命令在linux上执行是成功的没报错,但是证书并未生效,第二种方式是翻阅资料找到的,说是要加引号,但我加上还是未生效,如果遇到这种情况,可以试试这两种方式试试看

keytool -import -alias pro1 -keystore C:\mine\jdk7\jre\lib\security\cacerts -file C:\Downloads\pro1.cer
 keytool -import -alias pro1 -keystore /usr/jdk7/jre/lib/security/cacerts -file /tmp/pro1.cer

接下来会让你安装证书,按要求输入即可,密码默认是“changeit”
如果遇到keytool不可用这种情况,大概率就是没有设置JAVA_HOME,java -version看下,或者把keytool换成%JAVA_HOME%/bin/keytool,直接使用绝对路径

最后重启服务即可,以上我测试下来Windows环境是OK的,Linux并未生效
最后为了解决这个困扰我两天的问题妥协了,使用绕过SSL认证,这个也是百度了各种方式,因为使用的jdk7,有各种版本限制,最终找到解决方案:


public static CloseableHttpClient getScontractHttpClient() {
    SSLContext sslContext = null;
    try {
        sslContext = SSLContexts.custom().loadTrustMaterial(null, new TrustStrategy() {
            @Override
            public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
                return true;
            }
        }).build();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (KeyManagementException e) {
        e.printStackTrace();
    } catch (KeyStoreException e) {
        e.printStackTrace();
    }
    //创建httpClient
    return HttpClients.custom().setSSLContext(sslContext).
    setSSLHostnameVerifier(new NoopHostnameVerifier()).build();

}

使用的时候调用这个方法获取HttpClient即可,接下来操作就无异了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值