首页 > 解决方案 > 密钥库不识别证书

问题描述

我一直在努力将 2 个 SSL 证书嵌入到我的 java 代码中,下面的代码不会产生任何错误,但是当我尝试访问需要这些证书的 API 时出现错误。我显然有问题,但是在花费大量时间之后,我无法解决问题所在。

这是我正在使用的代码,下面的错误

    InputStream certInIssue =
            ClassLoader.class.getResourceAsStream("/resources/SSLCerts/Certificate1.cer");
    InputStream certInRoot =
            ClassLoader.class.getResourceAsStream("/resources/SSLCerts/Certificate.cer");

    try {
        KeyStore keystore;

        keystore = KeyStore.getInstance(KeyStore.getDefaultType());

        keystore.load(null, null);

        String password = "R9NNXVSqemsghmvZxkcWTfzCr3pDv5D2";

        String tempDir = "C:/Temp/";

        BufferedInputStream bis = new BufferedInputStream(certInIssue);
        CertificateFactory cf = CertificateFactory.getInstance("X.509");
        while (bis.available() > 0) {
            java.security.cert.Certificate cert = cf.generateCertificate(bis);
            keystore.setCertificateEntry("SSLIssue", cert);
        }

        bis = new BufferedInputStream(certInRoot);
        cf = CertificateFactory.getInstance("X.509");
        while (bis.available() > 0) {
            java.security.cert.Certificate cert = cf.generateCertificate(bis);
            keystore.setCertificateEntry("SSLRoot", cert);
        }

        certInIssue.close();
        certInRoot.close();

        OutputStream out = new FileOutputStream(tempDir + "keyserverstore.keystore");
        keystore.store(out, password.toCharArray());
        out.close();

        keystore.load(new FileInputStream(tempDir + "keyserverstore.keystore"),
                            password.toCharArray());

    } catch (KeyStoreException | CertificateException | IOException | NoSuchAlgorithmException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

但我得到了这个例外:

io.joshworks.restclient.http.exceptions.RestClientException:
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

标签: javasslkeystorejsse

解决方案


推荐阅读