【问题标题】:Spring Boot - enable and configure SSL certificateSpring Boot - 启用和配置 SSL 证书
【发布时间】:2018-09-07 02:55:25
【问题描述】:

我有这些证书/文件以便为我的应用程序启用 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)

我的密钥库如下所示:

其实我不知道要为嵌入式 tomcat (Spring Boot) 导入什么到密钥库中。

【问题讨论】:

  • server.ssl.enabled=true 将是一个好的开始。
  • 有大量可用的示例online。先试一试,如果遇到困难,请告诉我们您尝试了什么以及失败的细节。
  • 有谁知道如何在 Spring Boot 中以编程方式实现上述目标。我们必须在运行时从远程位置读取密钥库文件路径和密码,并填写这个假设的 SSL 对象,并希望 spring 将其作为初始化的一部分注入。有什么想法吗?

标签: ssl spring-boot https


【解决方案1】:

首先,您可以将 .pem 文件转换为 DER,然后生成密钥库。 请参阅https://stackoverflow.com/a/13992135/16358980 如何执行此操作。

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

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

【讨论】:

    【解决方案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>>
    

    【讨论】:

    • security.require-ssl=true 在 Spring Boot 2 中被弃用
    【解决方案3】:

    我建议您以 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确实有助于如果您的客户将接受自签名证书,但并非所有人都会接受。
    【解决方案4】:

    您必须使用指定的别名将您的私钥打包到 PFX 文件或 P12 中。因此,加载材料后会从keyStore中相应地提取。

    使用此工具找出别名是什么:

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-24
        • 2020-07-28
        • 2013-09-08
        • 2014-11-25
        • 2019-02-24
        • 2021-04-07
        • 1970-01-01
        • 2018-08-18
        相关资源
        最近更新 更多