java - 将 .key 和 .pem 文件导入 jks 文件并在 Java/Spring 中使用

标签 java ssl keytool pem jks

我从服务团队获得了以下 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,我需要执行以下操作吗?

  1. 创建一个自签名的 jks 文件
  2. 将 .key 和 .pem 导入新的 test.jks 文件?
  3. 执行以下操作

    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/

相关文章:

ios - 如何以编程方式获取 iOS 信任的证书列表?

带有 SSL 的 Java/Spring UnrecoverableKeyException

java - 如何创建定时器功能?

java - Itext - 如何给半行加下划线?

php - ssl 证书导致一个文件不工作

端口 443 上的 SSL 错误,页面未显示并导致错误 404

android - Keytool 的 -storepass 与 -keypass —— 为什么是 2 个密码?

Tomcat SSL 连接被拒绝

java - 这是发送给 Oracle 的正确查询吗

java - 使用 Android Volley 解析 JSON URL - JsonObjectRequest