我从服务团队获得了以下 key /证书,可以通过 SSL 调用他们的 API,我通过 curl 命令对其进行了验证。
1. QA.test.key
2. QA.test.pem
CURL 命令:
curl --key QA.test.key --cert ./QA.test.pem -X POST --header "Content-Type: application/json" --header "Accept: application/json" -d '{"pan":"1234567890123456", "client": " Application Name "}' https://test-qa.abc.com/tokenize
现在,要通过 https 调用 Java 中的 API,我需要执行以下操作吗?
- 创建一个自签名的 jks 文件
- 将 .key 和 .pem 导入新的 test.jks 文件?
执行以下操作
public class TestApp { final static String KEYSTORE_PASSWORD = "testing"; static { System.setProperty("javax.net.ssl.trustStore", "src/main/resources/test.jks"); System.setProperty("javax.net.ssl.trustStorePassword", KEYSTORE_PASSWORD); System.setProperty("javax.net.ssl.keyStore", "src/main/resources/test.jks"); System.setProperty("javax.net.ssl.keyStorePassword", KEYSTORE_PASSWORD); } public static void main(String[] args) { SpringApplication.run(TestApp.class, args); }
我在使用 jks 文件时收到无效证书错误,创建 jks 文件并导入 .key 和 .pem 文件以使其正常工作的最佳方法是什么?
最佳答案
使用 OpenSSL 实用程序创建 PKCS #12 文件。然后您可以使用系统属性将其指定为您的 keystore 。
openssl pkcs12 -export -in QA.test.pem -inkey QA.test.key -out test.pkcs12
此命令将提示输入密码以加密新的 PKCS #12 文件。它还可能提示输入用于加密 QA.test.key
的密码(如果有)。
javax.net.ssl.keyStore=test.pkcs12 javax.net.ssl.keyStorePassword=<whatever you entered when creating PKCS #12> javax.net.ssl.keyStoreType=PKCS12
trustStore
属性是分开的;它们影响如何验证服务器。如果服务器使用由“真实”CA 颁发的证书,则必要的证书应该已经存在于 Java 运行时中。否则,您将不得不创建一个额外的 key 存储,这可以使用 Java 的 keytool
命令来完成。
请注意 Java 9 will use PKCS #12 files as the default keystore 类型。
关于java - 将 .key 和 .pem 文件导入 jks 文件并在 Java/Spring 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37598919/