Java-приложение Spring не может найти файл хранилища ключей - PullRequest
3 голосов
/ 26 марта 2019

Я пытаюсь настроить простое приложение Spring для использования SSL и размещения его в Digital Ocean. Почему мое приложение не находит файл хранилища ключей?

Капля, которую я настроил, основана на 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>

Я ожидаю, что это запустится и запустит веб-сервер на настроенном порту. Однако, что я получаю в трассировке стека это:

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

Достаточно странно, когда я запускаю тот же самый jar-файл с тем же файлом keystore.p12 на своем компьютере с Windows, он работает нормально:

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, поскольку я пытался установить разрешения для файла хранилища ключей следующим образом:

-rw-r--r-- 1 root root     4274 Mar 26 18:44 keystore.p12

Я запускаю свой jar-файл с помощью следующей команды (пробовал также с sudo infront):

java -jar gimme-meme-1.0.0.war

Ответы [ 2 ]

1 голос
/ 05 апреля 2019

Spring загружает файл из classpath, что позволяет, поэтому вы должны префиксировать путь с этим classpath:, например,

server.ssl.key-store : classpath:keystore.p12

или если вы используете символ = в качестве ключа / значенияdelimiter:

server.ssl.key-store = classpath:keystore.p12

Имейте в виду, что значение обрезается только с левой стороны, поэтому после этого значения не должно быть пробелов.

0 голосов
/ 26 марта 2019

Похоже, ваше приложение просто ищет в текущем каталоге файл keystore.p12, как указано:

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

Скорее всего, вам нужно сообщить Spring Bootчто файл в банке.

Например, если вы сохраните файл на src/main/resources, gradle & maven поместит этот файл в корень пути к классам.Чтобы передать эту информацию в приложение весенней загрузки, вам нужно указать, что файл находится в пути к классам.

Это означает, что вам нужно установить server.ssl.key-store в classpath:keystore.p12, чтобы Spring знал, что ему нужнозагрузить хранилище ключей из пути к классу архива.

- РЕДАКТИРОВАТЬ -

Вот пример кого-то, имеющего похожую проблему, которая иллюстрирует это исправление.

Github Выпуск аналогичной проблемы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...