在Spring Boot中添加.crt以启用SSL

Mac*_*rik 6 ssl https spring tomcat spring-boot

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

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

dea08asdjakjawl.crt  
gd_bundle-g1-g1.crt  
gdig.crt.pem  
Run Code Online (Sandbox Code Playgroud)

我在CentOS7服务器上有一个正在运行的Spring Boot应用程序(在具有嵌入式Tomcat的端口80上)。(服务器在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: "***"  
Run Code Online (Sandbox Code Playgroud)

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

Mac*_*rik 8

所以正确的程序如下:

我不得不从头开始重新创建 CSR,而是使用 Java Key Store。

keytool -genkey -alias mydomain -keyalg RSA -keystore KeyStore.jks -keysize 2048
Run Code Online (Sandbox Code Playgroud)

然后是一个新的 CSR:

keytool -certreq -alias mydomain -keystore KeyStore.jks -file mydomain.csr
Run Code Online (Sandbox Code Playgroud)

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

keytool -import -trustcacerts -alias intermediate -file intermediate.crt -keystore KeyStore.jks
Run Code Online (Sandbox Code Playgroud)

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

keytool -import -trustcacerts -alias mydomain -file mydomain.crt -keystore KeyStore.jks
Run Code Online (Sandbox Code Playgroud)

然后这是可以像这样转换为 p12 的东西:

 keytool -importkeystore -srckeystore <MY_KEYSTORE.jks> -destkeystore <MY_FILE.p12> -srcstoretype JKS -deststoretype PKCS12 -deststorepass <PASSWORD_PKCS12> -srcalias <ALIAS_SRC> -destalias <ALIAS_DEST>
Run Code Online (Sandbox Code Playgroud)

最后 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
Run Code Online (Sandbox Code Playgroud)

它终于开始工作了。


小智 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. 将 PKCS12 文件导入 JKS 密钥库中 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>
Run Code Online (Sandbox Code Playgroud)

它应该有效。