Java 密钥库无法识别证书
我一直在努力将2个SSL证书嵌入到我的java代码中,下面的代码没有生成任何错误,但是当我尝试访问需要这些证书的API时,我得到了一个错误。我显然出了点问题,但在花了大量时间之后,我无法解决问题 下面是我正在使用的代码,错误如下Java 密钥库无法识别证书,java,ssl,keystore,jsse,Java,Ssl,Keystore,Jsse,我一直在努力将2个SSL证书嵌入到我的java代码中,下面的代码没有生成任何错误,但是当我尝试访问需要这些证书的API时,我得到了一个错误。我显然出了点问题,但在花了大量时间之后,我无法解决问题 下面是我正在使用的代码,错误如下 InputStream certInIssue = ClassLoader.class.getResourceAsStream("/resources/SSLCerts/Certificate1.cer"); InputStrea
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
在这之后,你对密钥库做了什么?我正在尝试获取一个令牌,以便可以访问API。之后,我猜当我调用代码访问网站以获取令牌时,它会自动使用密钥库,我猜这是不对的?叹气。在此之后,您在代码中对密钥库做了什么?我猜加载的密钥库不会自动引用。您真的希望某个未知的软件自动加载名为
keyserverstore.keystore
?或者您的本地KeyStore
变量神奇地传播到其范围之外?之后您对KeyStore做了什么?我正在尝试获取令牌以便访问API。之后,我猜当我调用代码访问网站以获取令牌时,它会自动使用密钥库,我猜这是不对的?叹气。在此之后,您在代码中对密钥库做了什么?我猜加载的密钥库不会自动引用。您真的希望某个未知的软件自动加载名为keyserverstore.keystore
?或者您的本地密钥库变量神奇地传播到其范围之外?