Я думаю, что это может быть проблема с кодом.
Некоторые свойства JVM используются кодом, который запускается статической инициализацией.В этом случае свойство javax.net.ssl.trustStore
используется в первый раз, когда что-то пытается получить доступ к хранилищу доверенных ключей по умолчанию или к набору доверенных сертификатов X509 по умолчанию.Неясно, когда это произойдет.
Итак, есть большая вероятность, что ваш звонок на System.setProperty
происходит слишком поздно;то есть после того, как оно было использовано.
Попробуйте задать свойство с помощью параметра командной строки -Djavax.net.ssl.trustStore=...
и посмотрите, работает ли оно.
ОБНОВЛЕНИЕ
Я пытался с -Djavax.net.ssl.trustStore, он не работал хорошо, потому что работал "только когда хотел", 10 попыток одна работала, примерно!Это даже из-за того, что использование -Djavax.net.ssl.trustStore может привести к задержке применения cacerts?При выполнении этого кода метод представляет собой @Bean (name = "contextSource") внутри класса @Configuration.Как я могу заставить бежать в нужное время?
По крайней мере, это показывает, что если вы используете -D
, свойство устанавливается достаточно рано, чтобы быть доступным.Это доказывает, что механизм не сломан!
Теперь проблема заключается в том, что ваш пользовательский TrustStore
файл используется до того, как приложение сможет его создать.(Вы можете проверить это ...)
Я предполагаю, что это инициирует веб-контейнер.Я не думаю, что вы можете заставить это работать 1 .Вместо этого вам нужно обратиться к пользовательскому требованию TrustStore другим способом:
Добавить отдельный шаг развертывания для извлечения пользовательского TrustStore в файл в файловой системе перед запускомвеб-контейнер .
В качестве альтернативы, измените веб-приложение или веб-контейнер, чтобы не полагаться на механизм TrustStore по умолчанию.
Чтобы ответить на вашследующий вопрос: насколько я могу судить, нет.Код безопасности Java не предназначен для того, чтобы можно было отложить создание экземпляра TrustStore по умолчанию или разрешить его изменение.Посмотрите на исходный код !!
1 - Даже если вы можете установить свойство до того, как веб-контейнер инициализирует и попытается использовать TrustStore, вам необходимо сначала создать TrustStore из веб-приложенияресурс.Загрузчик классов для этого ресурса создается веб-контейнером во время или после инициализации веб-контейнера.Скорее всего, это будет слишком сложно, чтобы заставить шаги надежно выполняться в том порядке, в котором они вам нужны.