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

时间:2017-10-10 15:04:08

标签: spring tomcat ssl spring-boot https

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

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

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

我在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: "***"  

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

5 个答案:

答案 0 :(得分:3)

您需要创建密钥库和trusstore(或使用java提供的默认trusstore)。密钥库将包含您的私钥和服务器证书。 truststore将包含您的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证书链

答案 1 :(得分:3)

所以正确的程序如下:

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

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

然后是一个新的CSR:

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

必须重新发送给cert提供程序才能生成新的.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

它终于有效了。

答案 2 :(得分:1)

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

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

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 Bundle证书导入JKS密钥库 keytool -import -alias <alias-name> -trustcacerts -file <bundle.crt> -keystore keystore.jks

注意:

Private.key 是为CA生成的密钥,用于将其用于证书颁发。
密码短语是用于保护您的私钥的密码。您提供的内容将创建private.key。 For more info

最后将.jks文件复制到您的项目/resource文件夹并更新application.properies文件。

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

它应该可以工作。

答案 3 :(得分:0)

如果您要将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证书.p12 -noout -info

在春季引导属性中添加以下内容

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

reference

答案 4 :(得分:-1)

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

在最糟糕的情况下,使用密钥工具重新生成CSR并再次重新生成SSL / TLS证书 - 它应该不会产生额外费用。