由于 jsse.alias_no_key_entry 使用带有 GoDaddy 签名证书的 JKS,SpringBoot 无法启动

SpringBoot fails to start due to jsse.alias_no_key_entry using JKS with GoDaddy signed certificate

我正在尝试使用 SSL 保护我的 SpringBoot 服务器。我已经生成了一个密钥库和 CSR。我从 GoDaddy 收到了中间证书和域证书。我将它们导入到用于生成 CSR 的密钥库中。

我使用以下命令生成密钥库和 CSR。

keytool -genkey -alias server-alias -keyalg RSA -keysize 2048 -keystore keystore.jks -dname "CN=name,OU=Unit, O=Org, L=NoWhere, ST=NoWhere, C=CA"
keytool -certreq -alias server-alias -file domain.csr -keystore keystore.jks

在我的 SpringBoot 应用程序中,我的 applications.properties 文件中有以下配置。

server.ssl.key-store-type=JKS
server.ssl.key-store=location/keystore.jks
server.ssl.key-store-password=password
server.ssl.key-alias=server-alias
security.require-ssl=true

我在启动时收到以下异常原因:

Caused by: java.io.IOException: jsse.alias_no_key_entry
    at org.apache.tomcat.util.net.SSLUtilBase.getKeyManagers(SSLUtilBase.java:317)
    at org.apache.tomcat.util.net.SSLUtilBase.createSSLContext(SSLUtilBase.java:239)
    at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:97)
    ... 20 common frames omitted

如果有任何帮助,我将不胜感激。谢谢!

似乎(至少)有几个原因可能会发生这种情况:

  1. 密钥库包含证书但不包含私钥……或者至少不是正确的密钥。参见 How to resolve : java.io.IOException: jsse.alias_no_key_entry
  2. 您只是配置了错误的别名;如果您输入密钥库中不存在的别名,您将得到同样的错误。

正在查找的别名需要存在于密钥库中,并且关联的私钥需要存在于那里(不仅仅是证书)。如果不满足这些条件,它将抛出此错误。