将.crt添加到Spring Boot以启用SSL

问题描述 投票:0回答:6

我以前从未这样做过,并且大多数教程都没有提到如何处理.crt 文件。

我从GoDaddy购买了SSL证书,下载时选择了Tomcat作为平台。该 zip 文件包含 3 个文件:

dea08asdjakjawl.crt  
gd_bundle-g1-g1.crt  
gdig.crt.pem  

我在 CentOS7 服务器上有一个正在运行的 Spring Boot 应用程序(在端口 80 上,带有嵌入式 Tomcat)。 (服务器在 Digital Ocean 上运行,它有一个分配的域,并且使用简单的 http)

我想将其切换到 https://something.com

所有教程都表明我必须有一个 .jks 或 .p12 文件,但我无法将 .crt 文件转换为该文件。除此之外,我不确定 2 个 .crt 文件中的哪一个是我应该转换为 .jks/.p12 的文件。

我已将其添加到我的 application.yaml 中,但没有帮助:

server:    
  port: 443  
  ssl:  
    enabled: true  
    key-alias: server  
    key-store: "cert.crt"  
    key-store-password: "***"  

如何更改正在运行的 Spring Boot 项目以接受使用此证书的 HTTPS 查询?

spring tomcat ssl spring-boot https
6个回答
11
投票

所以正确的程序如下:

我必须使用 Java 密钥存储从头开始重新创建 CSR。

keytool -genkey -alias mydomain -keyalg RSA -keystore KeyStore.jks -keysize 2048

然后是新的 CSR:

keytool -certreq -alias mydomain -keystore KeyStore.jks -file mydomain.csr

必须将其重新发送给证书提供商以生成新的 .cer 文件。所以他们给我发回了提到的 2 个 .cer 文件,“捆绑”文件是中间 .cer,我需要像这样添加:

keytool -import -trustcacerts -alias intermediate -file intermediate.crt -keystore KeyStore.jks

然后实际的“长命名”.cer 文件如下所示:

keytool -import -trustcacerts -alias mydomain -file mydomain.crt -keystore KeyStore.jks

然后可以将其转换为 p12,如下所示:

 keytool -importkeystore -srckeystore <MY_KEYSTORE.jks> -destkeystore <MY_FILE.p12> -srcstoretype JKS -deststoretype PKCS12 -deststorepass <PASSWORD_PKCS12> -srcalias <ALIAS_SRC> -destalias <ALIAS_DEST>

最后 application.properties 需要额外的行并变成这样:

server.port=443
server.ssl.enabled=true
security.require-ssl=true
server.ssl.key-store=keystore.p12
server.ssl.key-store-password=password
server.ssl.key-alias=domain
server.ssl.key-password=password

终于可以工作了。


8
投票

我之前在使用 Spring Boot 时遇到过这个问题。证书颁发机构向我发送了一个文件夹,其中包含:

  • domain-name.crt(针对域名生成的证书文件)
  • bundle.crt(包含 CA 根证书和/或中间证书参考。有关 CA 根证书和中间证书的详细信息单击此处

Spring Boot 仅理解 .JKS / PKCS12 中的证书文件。我们需要将.CRT文件转换为.JKS格式文件。步骤如下:

  1. 将证书转换为PKCS12格式
    openssl pkcs12 -export -in <domain-name.crt> -inkey </path-to private.key> -name <alias-name> -out <domain-name.p12>
    。这将生成一个 .p12 文件
  2. 导入 JKS 密钥库中的 PKCS12 文件
    keytool -importkeystore -deststorepass <pass-phrase> -destkeystore keystore.jks -srckeystore <your .p12 file> -srcstoretype PKCS12
    。将创建一个扩展名为 .jks 的文件。
  3. 将 CA 捆绑证书导入 JKS 密钥库
    keytool -import -alias <alias-name> -trustcacerts -file <bundle.crt> -keystore keystore.jks

注:

Private.key 是您为 CA 生成的密钥,用于颁发证书。
pass-phrase 是保护您的私钥的密码。您提供的信息将创建 private.key。 了解更多信息

最后将 .jks 文件复制到您的项目

/resource
文件夹并更新
application.properies
文件。

server.ssl.key-store=classpath:keystore.jks
server.ssl.key-store-password=<pass-phrase>
server.ssl.key-alias=<alias-name>

它应该有效。


4
投票

您需要创建一个keystore和一个trusstore(或者使用java提供的默认trusstore)。密钥库将包含您的私钥和服务器证书。信任库将包含您的 ca 证书。 创建 p12 密钥库 -

openssl pkcs12 -export -in [path/to/certificate] -inkey [path/to/privatekey] -certfile [path/to/ca/certificate ] -out keystore.p12

输入密钥库的密码。在您的 application.yaml 中配置此密钥库。

对于信任存储条目,如果使用 java 的默认信任存储,则将您的 ca 证书添加到 ...jre/lib/security/cacerts

keytool -import -trustcacerts -alias root -file ca.crt -keystore cacerts

或者您可以创建 trusstore,然后在您的 application.yaml 中配置此信任库

您可以在互联网上轻松找到用于转换/创建/导入/导出/列表的所有 keytool 命令...

提供了3个文件你可以检查哪个是哪个- 1.应该是你的证书 2.应该是ca证书链


2
投票

如果你想将Openssl添加到Spring Boot中。

如果您已经安装了 openssl 软件,请按照以下步骤操作。 //创建密钥和公共证书

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

//测试

openssl x509 -text -noout -in certificate.pem

//组合密钥和公共证书

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

//测试

openssl pkcs12 -in certificate.p12 -noout -info

在 Spring Boot 属性中添加以下

server.ssl.enabled=true
server.ssl.key-store-type=PKCS12
# The path to the keystore containing the certificate
server.ssl.key-store=classpath:certificate.p12
# The password used to generate the certificate
server.ssl.key-store-password=password

参考


0
投票

好消息 与 SpringBoot 3.1+

应用程序.属性

//for server
server.port=443
server.ssl.enabled=true
server.ssl.certificate=file:/certs/tls.crt
server.ssl.certificate-private-key=file:/certs/tls.key

//for management
management.server.port=9090
management.server.ssl.enabled=true
management.server.ssl.certificate=file:/certs/tls.crt
management.server.ssl.certificate-private-key=file:/certs/tls.key

-2
投票

如果使用 Java,则可以使用

keytool
命令和
-keystore
参数生成私钥和 CSR。我承认我不知道是否以及如何将现有的导入密钥库(
keytool
允许导入证书),但可能有办法。

在最坏的情况下,使用密钥工具重新生成 CSR 并重新生成 SSL/TLS 证书 - 应该不需要额外费用。

© www.soinside.com 2019 - 2024. All rights reserved.