前置条件
fullchain.pem(证书链)和 private.pem(私钥)是通过Let’s Encrypt证书获得的。
问题原因
后端代码在本地启动时报错:
Caused by: java.lang.IllegalArgumentException: standardService.connector.startFailed at org.apache.catalina.core.StandardService.addConnector(StandardService.java:235) ~[tomcat-embed-core-9.0.75.jar:9.0.75] at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.addPreviouslyRemovedConnectors(TomcatWebServer.java:282) ~[spring-boot-2.7.12.jar:2.7.12] at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start(TomcatWebServer.java:213) ~[spring-boot-2.7.12.jar:2.7.12] … 16 common frames omitted Caused by: org.apache.catalina.LifecycleException: Protocol handler start failed at org.apache.catalina.connector.Connector.startInternal(Connector.java:1039) ~[tomcat-embed-core-9.0.75.jar:9.0.75] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.75.jar:9.0.75] at org.apache.catalina.core.StandardService.addConnector(StandardService.java:232) ~[tomcat-embed-core-9.0.75.jar:9.0.75] … 18 common frames omitted Caused by: java.lang.IllegalArgumentException: Alias name [yideal] does not identify a key entry at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:107) ~[tomcat-embed-core-9.0.75.jar:9.0.75] at org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:71) ~[tomcat-embed-core-9.0.75.jar:9.0.75] at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:236) ~[tomcat-embed-core-9.0.75.jar:9.0.75] at org.apache.tomcat.util.net.AbstractEndpoint.bindWithCleanup(AbstractEndpoint.java:1302) ~[tomcat-embed-core-9.0.75.jar:9.0.75] at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:1388) ~[tomcat-embed-core-9.0.75.jar:9.0.75] at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:663) ~[tomcat-embed-core-9.0.75.jar:9.0.75] at org.apache.catalina.connector.Connector.startInternal(Connector.java:1037) ~[tomcat-embed-core-9.0.75.jar:9.0.75] … 20 common frames omitted Caused by: java.io.IOException: Alias name [yideal] does not identify a key entry at org.apache.tomcat.util.net.SSLUtilBase.getKeyManagers(SSLUtilBase.java:336) ~[tomcat-embed-core-9.0.75.jar:9.0.75] at org.apache.tomcat.util.net.SSLUtilBase.createSSLContext(SSLUtilBase.java:246) ~[tomcat-embed-core-9.0.75.jar:9.0.75] at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:105) ~[tomcat-embed-core-9.0.75.jar:9.0.75] … 26 common frames omitted
问题分析
经过查看异常堆栈信息,发现Alias name [yideal] does not identify a key entry at ,表示Tomcat 在加载 SSL 证书时找不到别名 yideal 对应的密钥条目。换句话说,就是在application.properties中,配置的server.ssl.key-alias=yideal错误
解决思路
方案一、重新生成P12文件。
方案二、查找P12文件里的别名是否正确,然后修改application.properties里的对应内容
解决步骤
方案一:
- 首先准备fullchain.pem(证书链)和 private.pem(私钥)放在本地
- 打开终端,切换到证书所在目录
- 执行命令:
openssl pkcs12 -export \ -in fullchain.pem \ -inkey private.pem \ -out keystore.p12 \ -name yideal \ -passout pass:your_password
- 在application.properties里进行相关配置
server.port=8443
server.ssl.key-store=classpath:keystore.p12
server.ssl.key-store-password=your_password
server.ssl.key-store-type=PKCS12
server.ssl.key-alias=yideal
方案二:
- 终端执行命令:
keytool -list -v -keystore keystore.p12 -storetype PKCS12 -storepass your_password
- 在输出内容里,找到别名,将内容复制到
server.ssl.key-alias=yideal
中
效果
最终,问题得到解决,本地可以正常启动项目