Spring Java 应用程序找不到密钥库文件

MZo*_*kov 5 java linux ssl spring tomcat

我正在尝试设置一个简单的 Spring 应用程序以使用 SSL 并将其托管在 Digital Ocean 上。为什么我的应用找不到密钥库文件?

我设置的 Droplet 基于 Ubuntu 18.04。我使用 Letsencrypt 来获取证书和指南来生成一个 PKCS 文件。我已经设置了我的 application.properties 文件来查看 jar 文件的当前目录,如下所示:

security.require-ssl:true
server.ssl.key-store:keystore.p12
server.ssl.key-store-password:<password>
server.ssl.key-store-type:PKCS12
server.ssl.key-alias:<alias>

Run Code Online (Sandbox Code Playgroud)

我希望它能够在配置的端口上运行并启动 Web 服务器。但是,我在堆栈跟踪中得到的是:

Caused by: java.io.FileNotFoundException: /root/software/gimmememe/target/keystore.p12  (No such file or directory)
Run Code Online (Sandbox Code Playgroud)

奇怪的是,当我在自己的 Windows 机器上使用相同的 keystore.p12 文件运行相同的 jar 时,它运行良好:

o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 9123 (https) with context path ''
meme.Application                         : Started Application in 4.985 seconds (JVM running for 5.464)
Run Code Online (Sandbox Code Playgroud)

我不认为这是 Ubuntu 机器上的权限问题,因为我尝试像这样设置密钥库文件的权限:

-rw-r--r-- 1 root root     4274 Mar 26 18:44 keystore.p12
Run Code Online (Sandbox Code Playgroud)

我正在使用以下命令运行我的 jar 文件(也尝试使用 sudo infront):

java -jar gimme-meme-1.0.0.war
Run Code Online (Sandbox Code Playgroud)

isa*_*pir 3

Spring从类路径加载文件,这允许,所以你应该在路径前面加上那个前缀classpath:,例如

server.ssl.key-store : classpath:keystore.p12
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用=符号作为键/值分隔符:

server.ssl.key-store = classpath:keystore.p12
Run Code Online (Sandbox Code Playgroud)

请记住,该值仅在左侧被修剪,因此值后面不能有任何尾随空格。