1. 概述

在之前的教程中,我们展示了如何将 Java KeyStore (JKS) 转换为 PEM 格式。在本教程中,我们将把 PEM 格式转换为标准 Java KeyStore (JKS) 格式。 Java KeyStore 是一个存储证书及其匹配私钥的容器。

我们将使用 keytoolopenssl 命令的组合来从 PEM 转换为 JKS。 keytool 命令随 JDK(Java 开发工具包)一起提供,用于从 PEM 转换为 PKCS12。第二个命令 openssl 需要下载,它的作用是从PKCS12转换为JKS。

2. 文件格式

JKS 是一种特定于 Java 的文件格式,在 Java 8 之前一直是 KeyStore 的默认格式 。从 Java 9 开始, PKCS#12 是默认的 KeyStore 格式 。尽管有 JKS,PKCS#12 仍然是用于存储加密数据的标准化且与语言无关的格式。 PKCS#12 格式也称为 PKCS12 或 PFX。

PEM(隐私增强邮件)也是一种证书容器格式。 PEM 文件以 Base64 编码。这确保了数据在不同系统之间的转换过程中保持完整。

此外,PEM 文件可以包含一个或多个实例,每个实例都由纯文本页眉和页脚分隔:

-----BEGIN CERTIFICATE-----

// base64 encoded

-----END CERTIFICATE-----

3.将PEM转换为JKS格式

现在,我们将完成将所有证书和私钥从 PEM 格式转换为 JKS 格式的步骤。

出于示例目的,我们将创建一个自签名证书。

3.1.创建 PEM 文件

我们首先使用 openssl 生成两个文件 key.pemcert.pem

openssl req -newkey rsa:2048 -x509 -keyout key.pem -out cert.pem -days 365 

该工具将提示我们输入 PEM 密码和其他信息。

一旦我们回答了所有的提示, openssl 工具就会输出两个文件:

  • key.pem (私钥)
  • cert.pem (公共证书)

我们将使用这些文件来生成我们的自签名证书

3.2.生成 PKCS12 证书

在大多数情况下,证书采用公钥加密标准 #12 (PKCS12) 格式。我们很少使用 Java KeyStore (JKS) 格式。

让我们 将 PEM 转换为 PKCS12 格式

openssl pkcs12 -export -in cert.pem -inkey key.pem -out certificate.p12 -name "certificate"

命令运行时,系统会提示我们输入之前为 key.pem 创建的密码:

Enter pass phrase for key.pem:

然后我们会看到提示要求输入 certificate.p12 的新密码:

Enter Export Password:

之后,我们将拥有一个以 PCKS12 格式存储的 certificate.p12 KeyStore。

3.3. PKCS#12 至 JKS

最后一步是将 PKCS12 转换为 JKS 格式:

keytool -importkeystore -srckeystore certificate.p12 -srcstoretype pkcs12 -destkeystore cert.jks

该命令执行时,会提示输入 cert.jks 文件的新密码:

Enter destination keystore password:

它会提示我们输入之前创建的 certificate.p12 密码:

Enter source keystore password:

然后,我们应该看到最终的输出:

Entry for alias certificate successfully imported.
Import command completed: 1 entries successfully imported, 0 entries failed or cancelled

结果是以 JKS 格式存储的 cert.jks KeyStore。

4。结论

在本文中,我们描述了借助中间 PKCS12 格式将 PEM 文件转换为 JKS 格式的步骤。

作为帮助工具,我们使用了 keytoolopenssl 命令。