Spring Boot - 启用和配置 SSL 证书

13

我有以下证书/文件,以便为我的应用启用SSL:

证书

我发现Spring Boot需要这些属性来启用HTTPS:

server.port=8089
server.ssl.enabled=true
server.ssl.key-store=src/main/resources/keystore.p12
server.ssl.key-store-password=****
server.ssl.keyStoreType=PKCS12
server.ssl.keyAlias=tomcat

但是这并不起作用。我的问题现在是,我需要做什么才能使它工作?https://abc.lehr.co.at应该是URL。

[编辑]

我已经创建了自己的密钥库-使用它,我得到以下异常:

java.io.IOException: Alias name tomcat does not identify a key entry
at org.apache.tomcat.util.net.jsse.JSSESocketFactory.getKeyManagers(JSSESocketFactory.java:596)
at org.apache.tomcat.util.net.jsse.JSSESocketFactory.getKeyManagers(JSSESocketFactory.java:534)
at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:363)
at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:739)
at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:472)
at org.apache.coyote.http11.Http11NioProtocol.start(Http11NioProtocol.java:81)
at org.apache.catalina.connector.Connector.startInternal(Connector.java:986)

我的密钥库看起来像这样:

Keystore

实际上,我不知道在嵌入式Tomcat(Spring Boot)中应该导入什么到密钥库中。


server.ssl.enabled=true 是一个不错的开始。 - Marc Tarin
1
有大量的示例可在网上找到(https://www.google.fr/search?q=spring+boot+ssl+configuration)。首先尝试一下,如果遇到困难,请告诉我们您尝试了什么以及失败了什么。 - Marc Tarin
1
https://dev59.com/iV0b5IYBdhLWcg3wLOg2#29582178 - Bhushan Uniyal
1
有人知道如何在Spring Boot中以编程方式实现上述功能吗?我们需要从远程位置运行时读取密钥库文件路径和密码,并将其填充到SSL对象中,希望Spring在初始化的一部分注入它。有什么想法吗? - Simple-Solution
5个回答

16

要启用SSL,您必须提供私钥而不是信任的证书。

在您的密钥库中,“tomcat”应该被列为privatekeyentry的别名,而不是trustedcertentry的别名。


3

您需要将私钥打包到PFX文件或P12文件中,并指定别名。这样,在加载材料后,它将从密钥库中相应地被拾取。

使用此工具查找别名:

keytool -list -storetype pkcs12 -keystore my_debug_keystore.p12 -storepass debug

2
server.port=8089
server.ssl.enabled=true
server.ssl.key-store=src/main/resources/keystore.p12
server.ssl.key-store-password=****
server.ssl.keyStoreType=PKCS12
server.ssl.keyAlias=tomcat << This should be the alias of yourfile.12 if you have forgotten just create a new one and replace it>>

不要忘记添加

security.require-ssl=true <<Tell Spring Security (if used) to require requests over HTTPS>>

4
在Spring Boot 2中,security.require-ssl=true已经过时。 - jarosik

0
我建议您使用JKS格式创建您的KeyStore:
 keytool -genkey -keyalg RSA -alias my_alias -keystore keystore.jks -storepass password -validity 360 -keysize 2048

然后添加配置:

server.port=8089
server.ssl.enabled=true
server.ssl.key-store=src/main/resources/keystore.jks
server.ssl.key-store-password=****
server.ssl.keyStoreType=JKS
server.ssl.keyAlias=my_alias

格式并不重要;Java和Spring长期以来一直处理所有格式,只要你正确指定即可。自从9(2018年12月)以来,keytool已经不再默认使用JKS了。如果您的客户端接受自签名证书,则使用-genkey确实有所帮助,但并非所有客户端都会接受。 - dave_thompson_085

0

首先您可以将您的.pem文件转换为DER格式,然后生成密钥库。 请参考 https://dev59.com/uHI95IYBdhLWcg3w1BdN#13992135 来完成此操作。

在您的application.properties文件中,将key-store属性更改为您生成的密钥库文件:

server.ssl.key-store=<your-generated-keystore>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接