Как мое приложение может получить доступ к файлу keyStore.jks, настроенному в Tomcat server.xml?
В conf/server.xml я написал следующий текст:
<Connector port="8443" SSLEnabled="true" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="200"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="keyStore" keystorePass="password" keystoreType="JKS"
keyAlias="tomcat"/>
И затем мне нужно использовать содержимое keyStore в коде (в сервлете на стороне сервера).
Я попробовал это:
System.getProperty("javax.net.ssl.keyStore")
Но он возвращает имя keyStore.
Так есть ли способ получить содержимое keyStore? Или, может быть, я должен сделать другую конфигурацию сервера?
(Мой следующий шаг - извлечение закрытых и открытых ключей из хранилища ключей и их использование для JWT).
1 ответ
Я думаю, что вы должны быть в состоянии получить значения параметров через ServerFactory.getServer().findServices()[0].findConnectors()[0]
или же org.apache.tomee.loader.TomcatHelper.getServer()
(в зависимости от вашей версии Tomcat - см. этот вопрос), а затем используйте их, чтобы открыть хранилище ключей как обычно (KeyStore.getInstance(...).load(...)
).
Но я бы порекомендовал вам использовать другое хранилище ключей + ключ в специальной конфигурации для ваших нужд JWT, чтобы:
- ваш код не тесно связан с Tomcat (= переносимость)
- ваши сотрудники не должны заботиться о конкретных потребностях ваших приложений (и / или не захотят обновлять свое стандартное хранилище ключей SSL, используемое на всех их серверах Tomcat)
- Вы не используете одни и те же ключи для шифрования (SSL) и авторизации (JWT). Делать жизнь нападающего немного сложнее - это всегда хорошо.
Если у вас нет файла конфигурации в вашем приложении, и вы не хотите добавлять его, вы можете просто ожидать, что системное свойство будет определено с путем к хранилищу ключей. Например начать Tomcat с -Djwt.keystore=<keystore location>
в командной строке.