找不到spring-boot可执行文件warstore

Igo*_*tar 6 ssl tomcat war keystore spring-boot

我用ssl支持构建spring-boot可执行文件war.我的application.properties文件是:

server.port = 8443
server.ssl.key-store = classpath:keystore.jks
server.ssl.key-store-password = secret
server.ssl.key-password = another-secret
Run Code Online (Sandbox Code Playgroud)

WAR文件包含'keystore.jks'文件.但我得到奇怪的例外:

org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletContainerException: Could not find key store classpath:keystore.jks
Run Code Online (Sandbox Code Playgroud)

Caused by: java.io.FileNotFoundException: class path resource [keystore.jks] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/D:/projects/vi3na/vi3na.web/target/vi3na.war!/WEB-INF/classes!/keystore.jks
Run Code Online (Sandbox Code Playgroud)

什么签'!' 指的是在路径 'd:!/projects/vi3na/vi3na.web/target/vi3na.war/WEB-INF/classes中/keystore.jks'

And*_*son 9

更新:由于此增强请求,下面描述的限制不再适用.Tomcat 8.0.28+和7.0.66+可以从jar文件中加载密钥库.

原始答案

我猜你使用Tomcat作为嵌入式servlet容器?如参考文档中所述,Tomcat目前不支持从jar中加载密钥库或信任库:

Tomcat要求密钥存储(以及信任存储,如果您使用的话)可以直接在文件系统上访问,即无法从jar文件中读取它.

您应该移出keystore.jksjar并server.ssl.key-store使用其在文件系统上的位置进行更新.