Java 即使在添加CA证书后,也找不到请求目标的有效证书路径
这是我的代码,它通过api导入ca证书,但是导入证书后,它仍然给出错误,如下所示: “”“找不到请求目标的有效证书路径;嵌套异常为javax.net.ssl.SSLHandshakeException:PKIX路径生成失败”“…Java 即使在添加CA证书后,也找不到请求目标的有效证书路径,java,spring-boot,docker-compose,openssl,ssl-certificate,Java,Spring Boot,Docker Compose,Openssl,Ssl Certificate,这是我的代码,它通过api导入ca证书,但是导入证书后,它仍然给出错误,如下所示: “”“找不到请求目标的有效证书路径;嵌套异常为javax.net.ssl.SSLHandshakeException:PKIX路径生成失败”“… 我已验证证书已成功导入,但仍给出错误信息。 代码: InputStream certIn=certificateFile.getInputStream(); final char sep=File.separatorChar; File dir=新文件(System.g
我已验证证书已成功导入,但仍给出错误信息。 代码: InputStream certIn=certificateFile.getInputStream(); final char sep=File.separatorChar; File dir=新文件(System.getProperty(“java.home”)+sep+“lib”+sep+“security”); 文件=新文件(目录,“cacerts”); InputStream localCertIn=新文件InputStream(文件)
keystorekeystore=KeyStore.getInstance(KeyStore.getDefaultType());
load(localCertIn,keystrepassword.trim().toCharArray());
if(keystore.containsAlias(certAliasName.trim())){
证书关闭();
localCertIn.close();
返回新的响应属性(“证书别名已存在”,HttpStatus.CONFLICT);
}
localCertIn.close();
BufferedInputStream bis=新的BufferedInputStream(certIn);
CertificateFactory cf=CertificateFactory.getInstance(“X.509”);
while(bis.available()>0){
证书证书=cf.generateCertificate(bis);
setCertificateEntry(certAliasName.trim(),cert);
}
证书关闭();
OutputStream out=新文件OutputStream(文件);
存储(out,keyStorePassword.trim().toCharArray());
out.close();
我发现的另一种解决方案是,每次添加新证书时,我们都需要重新启动docker容器,但在生产级别,我们无法这样做,是否有人可以在这方面提供帮助?您说的是“导入证书”和“验证…”。。。证书“。在英语中,此复数表示
certificateFile.getInputStream()
中有多个证书(PEM块)——是否有?如果有,因为您将每个证书(PEM块)存储在certAliasName.trim()
中(第一个之后)覆盖并替换上一个文件,因此更新后的存储区中只剩下最后一个。嘿,是的,有多个pem文件,每个文件都被新文件覆盖,您能建议一些解决方案吗?如果您想要/需要所有文件,请为每个文件使用唯一的别名。如果您使用默认的TrustManager,它不依赖于任何特定的别名值,所以我使用的一种方法是序列号:1、2、3、4等等,它们很容易生成。嘿,找到了解决方案,是的,这个别名产生了一个问题,但是找到了,谢谢
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
keystore.load(localCertIn, keyStorePassword.trim().toCharArray());
if (keystore.containsAlias(certAliasName.trim())) {
certIn.close();
localCertIn.close();
return new ResponseEntity<String>("Certificate Alias Name Already Exist", HttpStatus.CONFLICT);
}
localCertIn.close();
BufferedInputStream bis = new BufferedInputStream(certIn);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
while (bis.available() > 0) {
Certificate cert = cf.generateCertificate(bis);
keystore.setCertificateEntry(certAliasName.trim(), cert);
}
certIn.close();
OutputStream out = new FileOutputStream(file);
keystore.store(out, keyStorePassword.trim().toCharArray());
out.close();