使用 P7B 证书在 Spring Boot Java 应用程序中启用 HTTPS

Enable HTTPS in a Spring Boot Java application with a P7B certificate

我想使用 p7b 证书在 spring 启动 java 应用程序中启用 https。

server.ssl.key-store=cert.p7b
server.ssl.keyStoreType=PKCS7

但不支持 PKCS7,这就是为什么我试图将其转换为 java 密钥存储文件 (JKS),但我失败了。

首先我尝试用密钥工具导入它

keytool -importcert -trustcacerts -file cert.p7b -keystore newkeystore.jks –storetype JCEKS

但我遇到异常

java.lang.Exception: Input not an X.509 certificate

然后我尝试将其转换为 pem 文件,效果很好

openssl pkcs7 -inform der -print_certs -in cert.p7b -out cert.pem

但是由于没有私钥,所以无法将其转换为 jks 文件。

keytool -importcert -trustcacerts -file cert.pem -keystore newkeystore.jks –storetype JCEKS

非常感谢任何形式的帮助

为了保护您的 SpringBoot 应用程序(启用 HTTPS),您需要 private key 以及您拥有的 p7b 证书链。

这是 p7b 的发行方式:

  • 首先你创建一个密钥对(私钥和一个 public 密钥)
  • 从上面创建的密钥对创建 CSR (PKCS#10)
  • 将 CSR 发送到证书颁发机构 (CA) 以进行签名
  • CA 对其签名并以 p7b (PKCS#7) 格式返回证书链

这些是您收到 p7b 后执行的步骤:

  • 将证书链 (p7b) 关联到您在第一步中创建的私钥。

现在您将拥有一个签名密钥对,您可以使用它来保护您的应用程序。

要回答您的问题,您需要找到您最初创建的密钥库,其中包含私钥和 public 密钥(自签名证书)。然后你 import/associate 使用 keytool 将证书链 (p7b) 到私钥。

如果您设法找到包含私钥的密钥库,您可以简单地运行这个keytool命令来关联证书链。

keytool -importcert -keystore [KEYSTORE] -storepass [KEYSTORE_PASSWORD] -file [P7B_FILE] -trustcacerts -alias [ALIAS_OF_KEY_PAIR] -keypass [KEY_PAIR_PASSWORD].

导入后,这将是您用来保护 SpringBoot 应用程序的密钥库。

扩展 p7b 文件仅包含证书链,因此 PKCS7 不是有效的密钥库类型。

既然您已经生成了证书,那么您别无选择,只能获取相应的私钥。否则,您可以使用 OpenSSL 等工具创建新的自签名 cert/key 对。或者生成一个 CSR 并由 CA 签名,如果你喜欢的话。