我在RestTemplate
应用程序中嵌入了SpringBoot
客户端,如下所示
@SpringBootApplication
public class SecureAppClientApplication {
private static final Logger LOG = LoggerFactory.getLogger(SecureAppClientApplication.class);
public static void main(String[] args) {
SpringApplication.run(SecureAppClientApplication.class, args);
LOG.debug("Testing connecting to secure site");
HttpsURLConnection.setDefaultHostnameVerifier ((hostname, session) -> false);
RestTemplate restTemp = new RestTemplate();
String greetings = restTemp.getForObject("https://my.secure.service", String.class);
LOG.debug("Received greetings from secured server ---> " + greetings );
}
}
application.proerties
的内容类似于
server.ssl.key-store=myKeyStore.jks
server.ssl.key-store-password=Store@123
server.ssl.key-alias=myClient
server.ssl.key-password=Key@1234
server.ssl.trust-store=cacerts
server.ssl.trust-store-password=changeit
还有其他属性,但与HTTPS无关(如Logging,JPA等)
现在,使用从浏览器(Mozilla)导出的主机证书,我在
中安装了相同的证书myKeyStore.jks
出现在classpath,cacerts
副本,cacerts
,cacerts
在JRE主页我仍然得到PKIX验证错误,其根目录是
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
不确定如何开始进行故障排除。是
openssl
生成的X509证书进行了测试。keytool -importcert -file certificate.cer -keystore keystore.jks -alias my-alias
更新
这似乎是一个证书问题。事实证明,从浏览器获取证书并没有多大帮助。我联系了我的服务器主机管理员,并获得了3个证书才能安装。傻我依靠浏览器证书。我猜有点像certificate chaining
。
结论 确保在实际使用案例中获得适当的证书,因为世界并不依赖于浏览器上可用的简单证书,尤其是对于Web服务调用。
答案 0 :(得分:0)
对于这种情况,它获得了正确的证书,因为我对它们了解不多。您可能需要多个证书。