Spring Boot не загружает хранилище ключей, указанное в application.yml - PullRequest
1 голос
/ 23 октября 2019

Я пытаюсь запустить и протестировать приложение Spring Boot, которое я упаковал в zip-файл и распаковал на виртуальной машине Linux. Почтовый индекс содержит все, что нужно приложению (по крайней мере, насколько мне известно). Когда я пытаюсь выполнить приложение, оно запускается, но быстро завершается сбоем, поскольку не может загрузить хранилище ключей, необходимое для безопасной связи SSH / TLS.

В моем application.yml есть следующее:

server:
  port: 8091
  ssl:
    enabled: true
    protocol: TLS
    trust-store-type: JKS
    trust-store: classpath:keystore/server.keystore
    trust-store-password: <hidden>
    key-store-type: JKS
    key-store: classpath:keystore/ra/server.keystore
    key-store-password: <hidden>

Структура каталогов в тестовой системе выглядит следующим образом:

[centos@route-assessor route-assessor]$ ls -R                                                                          
.:                                                                                                                     
config  elastic-apm-agent-1.10.0.jar  lib  run-route-assessor.sh  services-0.0.1-SNAPSHOT.jar           

./config:                                                                                                              
application.yml  keystore  log4j2.xml                                                                                  

./config/keystore:                                                                                                     
mp  ra  rg  server.keystore                                                                                            

./config/keystore/mp:                                                                                                  
server.keystore                                                                                                        

./config/keystore/ra:                                                                                                  
server.keystore                                                                                                        

./config/keystore/rg:                                                                                                  
server.keystore                                                                                                        

./lib
<dependency jars>

Вот исключение:

[2019-10-23 13:21:31.419] main WARN : context.AnnotationConfigServletWebServerApplicationContext:557 - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Could not load key store 'classpath:keystore/server.keystore'

"Runtime" Spring Boot, очевидно, видит и получает доступ к config каталог, но, кажется, не видит каталог keystore, содержащийся внутри. Нужно ли указывать пути по-разному в application.yml или мне нужно поместить файлы хранилища ключей в другое место?

Примечание : я могу запустить это приложение с application.yml, настроенным какпоказано из затмения без проблем. Конечно, для этой ситуации все ресурсы находятся в src/main/resources.

ОБНОВЛЕНИЕ :

Согласно предложению @ borban, я изменил application.yml следующим образом:

    key-store: file:config/keystore/ra/server.keystore
    trust-store: file:config/keystore/server.keystore

Это, похоже, решило одну проблему, но я еще не вышел из леса:

[2019-10-23 15:07:17.671] main ERROR: boot.SpringApplication:821 - Application run failed
org.springframework.boot.web.server.WebServerException: Unable to start embedded Jetty server
...
Caused by: java.lang.IllegalStateException: no valid keystore
...

Насколько я знаю, мои файлы хранилища ключей действительны и правильны (Я использую их в своем блоке разработки Windows уже несколько месяцев). Они копируются как часть почтового дистрибутива. Может, мне чего-то не хватает?

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

[2019-10-23 15:07:10.153] main WARN : resource.Resource:126 - java.lang.IllegalArgumentException: URI is not hierarchical 
[2019-10-23 15:07:10.155] main WARN : resource.Resource:126 - java.lang.IllegalArgumentException: URI is not hierarchical 

Я не помню, чтобы видел их раньше.

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Вы пытаетесь получить доступ к этому хранилищу ключей вне пути к классам и из самой файловой системы? Из структуры папок, которую вы даете, это похоже на случай. Если вы удалите префикс «classpath», а затем соответствующим образом обновите свой путь, он должен работать.

Из этого поста похоже, что вы должны использовать префикс «file»

https://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.html

0 голосов
/ 23 октября 2019

Вы можете использовать плагин ресурсов maven для добавления необходимых вам плагинов:

https://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.html

, затем использовать без classpath ??

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