从 JKS 密钥库中提取密钥以供 apache2 和 tomcat 使用

从 JKS 密钥库中提取密钥以供 apache2 和 tomcat 使用

我有一个 JKS 格式的密钥库,我想将其与 apache2 一起使用。如何才能轻松地将密钥和证书(我已经链接的)从 JKS 中导出?我找到了很多答案,但似乎没有人遇到我的问题……(或者答案不完整)

感谢您的时间。

答案1

JKS 具有 DER 证书,而对于 Apache,您需要具有 PE​​M(AKA X509)格式。

如何执行此操作的示例:

$JAVA_HOME/bin/keytool --list -keystore <mykeystore>
$JAVA_HOME/bin/keytool -export -rfc -alias <alias_name> -file <cert.crt> -keystore <mykeystore>

因此您将需要导出私钥,然后导出证书。

导出的私钥随后会进入 httpd.conf 中的 SSLCertificateKeyFile 指令,您可以将链式证书放入 SSLCertificateChainFile 指令中。这是对 SSLCertificateFile 指令的补充。

http://httpd.apache.org/docs/2.2/mod/mod_ssl.html

答案2

您无法使用 keytool 直接从 JKS 获取私钥;而是必须先转换为 PKCS12 格式,然后使用 openssl 命令。我已经完成了这项工作:

  1. 使用 keytool 将密钥库转换为 pkcs12

    keytool -importkeystore -srckeystore jks_filename.jks -destkeystore p12_filename.p12 -deststoretype PKCS12

  2. 使用 openssl 将证书导出为 .pem 文件:

    openssl pkcs12 -in p12_filename.p12 -nokeys -clcerts -out cert_filename.pem

  3. 使用openssl将相应的私钥导出为.pem文件:

    openssl pkcs12 -in p12_filename.p12 -nocerts -out key_filename.pem

  4. 在两个地方(SSLCertificateFile 和 SSLCertificateKeyFile)更新 ssl.conf 以配置端口 443 使用这些证书和密钥文件。

答案3

除了证书之外,没有其他方法可以“直接”导出任何东西。您需要执行 PKCS12 格式的中间步骤。

keytool -importkeystore -srckeystore rec.jks -destkeystore rec.p12 -deststoretype PKCS12

这将提示输入源和目标密码。如果您需要自动执行此操作,请使用PW=somepass keytool -srcpass:env PW ...keytool -srcstorepass:file filecontainingpass ...,类似地,-deststorepass

从那里,您可以使用 openssl 将 PKCS12 文件转换为标准 PEM:

openssl pkcs12 -in rec.p12 -out rec.pem

这也会提示输入密码。如果您不想加密生成的密钥,请使用-passin env:PW-passin file:filename-passout选项,或者,-nodes但要小心将其写入的位置。

生成的文件将包含您的密钥、证书以及可能的完整证书链。

相关内容