使用嵌入式 Tomcat 7 在 Spring Boot 中启用 SSL - FileNotFoundException 和 o.a.coyote.http11.Http11NioProtocol 问

Posted

技术标签:

【中文标题】使用嵌入式 Tomcat 7 在 Spring Boot 中启用 SSL - FileNotFoundException 和 o.a.coyote.http11.Http11NioProtocol 问题【英文标题】:Enabling SSL in Spring Boot with an embedded Tomcat 7 - FileNotFoundException and o.a.coyote.http11.Http11NioProtocol issue 【发布时间】:2016-03-08 17:18:51 【问题描述】:

我正在尝试为我的 Spring Boot 应用程序启用 SSL 以进行测试。我用这个命令行生成了一个密钥库文件:

keytool -genkey -alias tomcat
-storetype PKCS12 -keyalg RSA -keysize 2048
-keystore keystore.p12 -validity 3650

并将以下配置添加到我的 application.properties 文件中:

server.port=8443
server.ssl.key-store: keystore.p12
server.ssl.key-store-password: mypassword
server.ssl.keyStoreType: PKCS12
server.ssl.keyAlias: tomcat

当我使用嵌入式 Tomcat 8 版本运行应用程序时,SSL 已成功启用,并且在构建过程中没有错误。

但是当我通过如下更改 pom.xml 文件使用嵌入式 Tomcat 7 版本运行它时:

<properties>
    <tomcat.version>7.0.65</tomcat.version>
</properties>

SSL 未启用,我遇到以下错误:

java.io.FileNotFoundException: /tmp/tomcat.4863947968145457153.8443/file:/home/yahyaharif/spring-workspace/demossl/keystore.p12(没有这样的文件或目录)

org.apache.catalina.LifecycleException: 无法启动组件 [连接器[org.apache.coyote.http11.Http11NioProtocol-8443]]

org.springframework.boot.context.embedded.EmbeddedServletContainerExcepti> on: 无法启动嵌入式 Tomcat servlet 容器

我查看了错误并注意到我需要将一个嵌入式 servlet 容器 bean 添加到我的 main 中,但无济于事。

我还确保密钥库文件的文件路径正确。

关于为什么在嵌入式 Tomcat 8 而不是嵌入式 Tomcat 7 上完美启用 SSL 的任何线索?

【问题讨论】:

【参考方案1】:

在 Tomcat 8 中进行了更改,以允许从嵌入式 jar 文件中加载密钥库。它一直是backported to Tomcat 7,但要等到 7.0.66 发布后才能使用

如果您尝试使用期望此更改存在的 Spring Boot 版本(1.2.7 或更高版本),如果不存在,它将失败。我认为在 Tomcat 7.0.66 发布之前你有两个选择:

使用 Tomcat 8 在 Spring Boot 1.2.6 或更早版本中使用 Tomcat 7

【讨论】:

为我工作。谢谢 仅供参考,tomcat 8.0.x 没有解决这个问题。就我而言,我必须使用 tomcat 8.5.20

以上是关于使用嵌入式 Tomcat 7 在 Spring Boot 中启用 SSL - FileNotFoundException 和 o.a.coyote.http11.Http11NioProtocol 问的主要内容,如果未能解决你的问题,请参考以下文章

如何使用嵌入式 tomcat 在 Spring Boot 中增加文件大小上传限制

如何使用Spring Boot和嵌入式Tomcat配置此属性?

使用带有嵌入式 Tomcat 的 Spring Boot Weblfux

如何使用 Spring Boot 嵌入式 tomcat 设置会话超时

spring boot 嵌入式Tomcat的崩溃日志在哪里?

如何使用嵌入式 Tomcat 容器在 Spring Boot 中创建 JNDI 上下文