Java 8如何确保我们的代码检查完整的证书链?

时间:2019-02-13 19:41:59

标签: java ssl resttemplate

我有Spring Boot 1.5应用程序,它正在与某些Web服务建立连接。在所有情况下,这些都是TLS 1.2连接。我通过以下JVM参数运行应用程序:

-Djavax.net.ssl.keyStore=${KEYSTORE} \
-Djavax.net.ssl.keyStorePassword=${KEYSTORE_PW} -> password

javax.net.ssl.keyStore只是一个带有单个证书的jks文件。

我需要回答这个问题:设置TLS连接时,如何知道我是否在检查完整的证书链?还是仅根证书?是否仅取决于我信任库中包含的每个证书中拥有的CA?

我使用RestTemplate建立连接:

ResponseEntity<T> response = restTemplate.exchange(uri, HttpMethod.PUT, requestEntity, T.class);

我的RestTemplate实例没什么花哨的,这是我如何构建它:

RestTemplate restTemplate = new RestTemplate();

谢谢。

2019年2月14日更新

我想澄清一些事情。我100%确定我的代码使用TLS 1.2。如果我从密钥库中删除证书,那么所有调用都会因抱怨SSL异常而失败。

我正在调用的服务中的证书链由叶证书和中间证书组成。他们说他们只会更新叶子证书,他们说:

“如果客户端系统信任VendorX颁发的证书, 完整的链,则需要更新新的Leaf证书。”

令我困惑的部分是“完整的链条”。这意味着什么?这是否意味着您可以验证链的一部分还是整个链?

1 个答案:

答案 0 :(得分:-1)

在此处检查Michal Foksa的答案。它应该是您的起点:How to enforce TLS1.2 to Rest client using Rest Template