如何将 .pem ssl 证书用于作为 Spring Boot 应用程序开发的 rest api

Onk*_*nki 2 java ssl spring ca spring-boot

我们有一个用于其余 Web 服务的 Spring Boot 应用程序,该应用程序仍在开发中。我们现在使用自签名证书。

现在,它将与 1 个已开发的应用程序一起部署在一个系统中。默认情况下,此预先存在的应用程序使用自签名证书,但如果需要,客户端可以选择上传 CA 证书。现在,我们要为这个新应用程序使用相同的证书。

基本上,我们希望客户端为 1 个系统中运行的 2 个应用程序使用 1 个证书。

现在,此现有应用程序具有证书文件,如 .pem 和 .cer。现在,我如何在使用 jks 格式的证书的 Spring Boot 应用程序中使用此证书。

当然,如果有任何更新,证书应该对两个应用程序都可用。

Ale*_*lin 11

从 Spring Boot 2.7 开始,可以使用 PEM 编码的证书和私钥文件。
请参阅下面的示例(PKCS8 格式的私钥)。

server:
  port: 8443
  ssl:
    certificate: "classpath:my-cert.crt"
    certificate-private-key: "classpath:my-cert.key"
    trust-certificate: "classpath:ca-cert.crt"
Run Code Online (Sandbox Code Playgroud)

Spring 文档 2.7.2


小智 6

PEM 是一种众所周知的证书文件格式。除非涉及到 Java。因为 Java 只使用 JKS(它的 Java-only、二进制密钥库)或 PKCS12 作为密钥和证书。因此,我们必须将 PEM 编码的证书转换为 JKS 或 PKCS12,以便 Java 可以使用它。但这在很多情况下可能是丑陋的。

您可以在 spring-boot 应用程序中使用以下依赖项。

<dependency>
  <groupId>de.dentrassi.crypto</groupId>
  <artifactId>pem-keystore</artifactId>
  <version>2.0.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

然后加

KeyStore keyStore = KeyStore.getInstance("PEM");
Run Code Online (Sandbox Code Playgroud)

欲了解更多信息

https://github.com/ctron/pem-keystore

application.properties

 server.ssl.enabled=true
 server.ssl.key-store=/path/to/keystore.properties
 server.ssl.key-store-type=PEMCFG
 server.ssl.key-store-password=dummy
 server.ssl.key-alias=keycert
Run Code Online (Sandbox Code Playgroud)

然后你创建文件keystore.properties

alias=keycert
source.cert=/etc/…/fullchain.pem
source.key=/etc/…/privkey.pem
Run Code Online (Sandbox Code Playgroud)


小智 -3

为了测试安全 API,您可以使用 Fiddler 来绕过或伪造 SSL 的工具。

(或者)

您可以像下面这样配置应用程序属性。

server.port: 8443
security.require-ssl=true
server.ssl.key-store:/etc/letsencrypt/live/seeld.eu/keystore.p12
server.ssl.key-store-password: <your-password>
server.ssl.keyStoreType: PKCS12
server.ssl.keyAlias: tomcat
Run Code Online (Sandbox Code Playgroud)

  • 我的问题是如何将 .pem 文件与 Spring Boot 应用程序一起使用。 (3认同)