spring 将.crt添加到Sping Boot 以启用SSL

cunj1qz1  于 5个月前  发布在  Spring
关注(0)|答案(6)|浏览(59)

我以前从来没有这样做过,大多数教程都没有提到如何处理.crt文件。
我从GoDaddy购买了一个SSL证书,下载时选择了Tomcat作为平台。zip文件包含3个文件:

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

字符串
我在CentOS 7服务器上有一个正在运行的Sping Boot 应用程序(在端口80上,带有嵌入式Tomcat)。(服务器在Digital Ocean上运行,它有一个指定的域,并使用简单的http)
我想切换到https://something.com
所有的教程建议,我必须有一个.jks或.p12文件,但我不能转换的.crt文件,除此之外,我不知道哪个2 .crt文件是一个我应该转换为.jks/.p12。
我已经将此添加到我的应用程序.yaml中,但没有帮助:

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


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

slmsl1lt

slmsl1lt1#

因此,正确的程序如下:
我不得不使用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


而且它终于起作用了。

nnt7mjpx

nnt7mjpx2#

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

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

Sping Boot 只理解.JKS /PKCS 12格式的证书文件。我们需要将.CRT文件转换为.JKS格式的文件。步骤如下:
1.将证书转换为PKCS 12格式openssl pkcs12 -export -in <domain-name.crt> -inkey </path-to private.key> -name <alias-name> -out <domain-name.p12>。这将生成.p12文件
1.将PKCS 12文件导入到JKS密钥库keytool -importkeystore -deststorepass <pass-phrase> -destkeystore keystore.jks -srckeystore <your .p12 file> -srcstoretype PKCS12中。将创建扩展名为.jks的文件。
1.将CA捆绑证书导入JKS密钥库keytool -import -alias <alias-name> -trustcacerts -file <bundle.crt> -keystore keystore.jks
注意事项:

Private.key是您为CA生成的密钥,用于颁发证书。
pass-phrase是保护您私钥的密码。您提供的密码将创建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>

字符串
它应该会起作用。

6tr1vspr

6tr1vspr3#

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

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

字符串
输入一个密码为keystore.配置这keystore在你的application. yaml.
对于信任库条目,如果使用java的默认信任库,则将您的ca证书添加到. jre/lib/security/cacc

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


或者您可以创建truststore,然后在应用程序中配置此truststore。yaml
所有的keytool命令,你可以很容易地在互联网上找到转换/创建/导入/导出/列表.
提供了3个文件,您可以检查哪个是哪个- 1。应该是您的证书2。应该是CA证书链

baubqpgj

baubqpgj4#

如果你希望OpenSSL被添加到Sping 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


reference

yfwxisqw

yfwxisqw5#

关于SpringBoot 3.1+
application.properties

//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

字符串

8ehkhllq

8ehkhllq6#

如果使用Java,则使用-keystore参数使用keytool命令生成私钥和CSR。我承认我不知道是否以及如何将现有的密钥导入到密钥库中(keytool允许导入证书),但可能有一种方法。
在最坏的情况下,使用密钥工具重新生成CSR并重新生成SSL/TLS证书-这应该不会产生额外的成本。

相关问题