1. 概述
在之前的教程中,我们展示了如何将 Java KeyStore (JKS) 转换为 PEM 格式。在本教程中,我们将把 PEM 格式转换为标准 Java KeyStore (JKS) 格式。 Java KeyStore 是一个存储证书及其匹配私钥的容器。
我们将使用 keytool 和 openssl 命令的组合来从 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.pem 和 cert.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 格式的步骤。
作为帮助工具,我们使用了 keytool 和 openssl 命令。