java 使用RestTemplate在Sping Boot 应用程序中使用证书和密钥进行HTTPS调用

0qx6xfy6  于 2023-03-21  发布在  Java
关注(0)|答案(1)|浏览(350)

我想在Sping Boot 应用程序中使用RestTemplate进行以下curl调用:

curl -v --tlsv1.2 --cacert /etc/pki_service/ca/cacerts.pem --cert /etc/identity/client/certificates/client.pem -key /etc/identity/client/keys/client-key.pkcs8 https://server.com

我也遇到过类似的问题:Using RestTemplate to send authorization certificatesJava HTTPS client certificate authentication,但没有得到实现完全相同的事情的具体步骤。
有人能帮帮忙吗?谢谢。

vq8itlhq

vq8itlhq1#

把你的client.pem和client-key. pkcs 8导入到一个java的密钥存储库中,比如openssl和java keytool,可以直接使用pem证书和pkcs 8密钥,但是在java系统属性中使用它们就困难多了。
把你的pem样式的cacerts转换成一个名为cacerts. jks的jks。
允许您的服务器缓存信任服务器响应,如下所示:

System.setProperty("javax.net.ssl.trustStore", "cacerts.jks")

在RestTemplate调用中添加客户端证书的包含:(假设您创建的jks和密码分别是“myKeystore.jks”和“changeit”)

System.setProperty("javax.net.ssl.keyStore",  "myKeystore.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "changeit");

仅强制TLSv1.2

System.setProperty("jdk.tls.client.protocol", "TLSv1.2");

您可能需要使用Java命令行选项‑Djdk.tls.client.protocols="TLSv1.2"执行前面的操作

相关问题