Ссылка на файл хранилища ключей для JSSE из Maven jar

Я пытаюсь написать простое клиент-серверное приложение, используя JSSE для сокетов SSL. Я сгенерировал свой собственный сертификат 'handmade' с помощью keytool для сервера, и мне нужно установить свойство 'keystore' следующим образом:

System.setProperty("javax.net.ssl.keyStore","/keystore.ks");

Проблема заключается в следующем:

Насколько я понимаю, setProperty хочет только имя файла, а не сам файл. Из IDE все работает нормально, если я использую путь к файлу (то есть src/main/resources/keystore.ks, используя стандартную структуру каталогов maven). Проблема возникает после того, как я создаю JAR с maven. Этот ресурс не может быть найден.

Я понимаю, что файлы ресурсов копируются в корень JAR, но я не нашел никакого способа получить правильное имя файла для передачи в setProperty.

Я тоже пробовал

String pathKeystore=Server.class.getResource("/keystore.ks").getPath();

а также.toString() .toExternalForm() и так далее. Но ничего из этого не работает, если позже я установлю свойство с этой строкой. Глядя на другие вопросы, я вижу, что путь обычно не используется для ресурсов, и вместо этого вы просто читаете файл, но мне нужна строка в моем случае.

У меня нет хорошего понимания того, что я делаю, так как я новичок в Maven, но в основном мой вопрос можно сформулировать следующим образом:

Как получить правильный путь к файлу ресурса, который будет использоваться в качестве метода String для setProperty в файле JAR, созданном maven?

Спасибо всем заранее.

РЕДАКТИРОВАТЬ: я решил также установить свойство во время выполнения: я запустил свой сосуд с

java -Djavax.net.ssl.keyStore=keystore.ks -jar my_jar.jar

Я все еще устанавливаю пароль этого хранилища ключей в коде, так как у меня нет проблем с путем с этим.

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

java -Djavax.net.ssl.trustStore=jssecacerts -jar my_client_jar.jar

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

0 ответов

Другие вопросы по тегам