我正在尝试设置一个简单的 Spring 应用程序以使用 SSL 并将其托管在 Digital Ocean 上。为什么我的应用找不到 keystore 文件?
我设置的 Droplet 基于 Ubuntu 18.04。我使用 Letsencrypt 获得证书和 this生成 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>
我希望它能在配置的端口上运行并启动一个网络服务器。但是,我在堆栈跟踪中得到的是这样的:
Caused by: java.io.FileNotFoundException: /root/software/gimmememe/target/keystore.p12 (No such file or directory)
奇怪的是,当我在自己的 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)
我不认为这是 Ubuntu 机器上的权限问题,因为我尝试像这样设置 keystore 文件的权限:
-rw-r--r-- 1 root root 4274 Mar 26 18:44 keystore.p12
我正在使用以下命令运行我的 jar 文件(也尝试使用 sudo infront):
java -jar gimme-meme-1.0.0.war
最佳答案
Spring 从允许的类路径加载文件,因此您应该在路径前加上 classpath:
,例如
server.ssl.key-store : classpath:keystore.p12
或者,如果您使用 =
符号作为键/值分隔符:
server.ssl.key-store = classpath:keystore.p12
请记住,该值仅在左侧被修剪,因此您不能在该值之后有任何尾随空格。
关于java - Spring Java 应用程序找不到 keystore 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55364537/