Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > Jetty HTTPS. Как загрузить keystore из ресурсов?


Автор: ZVano 2.6.2016, 18:26
Доброго времени суток всем.
Есть программа , которая является Web-сервисом. 
Построена на пакете Jetty 9.3.0.M1 (это встраиваемый Web-сервер).

Потребовалось прикрутить к ней HTTPS.
Для этого сгенерировал самоподписной сертификат и положил его в каталог с ресурсами проекта "...WebApiService/src/main/resources/jetty-ssl.keystore"
Указал серверу Jetty путь к "jetty-ssl.keystore".  
Собрал, запустил - все ОК. По HTTPS  работает. 

Теперь ломаю голову Как уговорить Jetty использовать ресурс из JARа?
keystore дежит в "/resources/jetty-ssl.keystore" файла "WebApiService-1.0-SNAPSHOT.jar"
Код

         server = new Server(portHttps);
        HttpConfiguration http_config = new HttpConfiguration();
        http_config.addCustomizer(new SecureRequestCustomizer());
        http_config.setSecureScheme("https");
        http_config.setSecurePort(portHttps);
        HttpConfiguration https_config = new HttpConfiguration(http_config);
        https_config.addCustomizer(new SecureRequestCustomizer());
        SslContextFactory sslContextFactory = new SslContextFactory();
        sslContextFactory.setKeyStorePath("/media/src/java/WebApiService/src/main/resources/jetty-ssl.keystore"); // !! Тут нужно вместо загрузки с диска сделать загрузку ресурса из JARа
        sslContextFactory.setKeyStorePassword("myStorePass");
        sslContextFactory.setKeyManagerPassword("myKeyPass");


Вариант 1: при запуске извлечь "jetty-ssl.keystore" и сохранить в каталог Temp. 
Потом указать Jetty путь к файлу.
Он мне не нравится, но все равно вопрос - как это делается?

Вариант 2: использовать какой то другой инструмент Java (или Jetty), о котором я ничего не знаю.

Автор: TiKKi 2.6.2016, 22:54
Здравствуйте, у фабрики SslContextFactory есть метод setKeyStoreResource, для которого с помощью статичного метода Resource.newResource можно указать ресурс.

Автор: ZVano 3.6.2016, 09:36
Цитата(TiKKi @  2.6.2016,  21:54 Найти цитируемый пост)
Здравствуйте, у фабрики SslContextFactory есть метод setKeyStoreResource, для которого с помощью статичного метода Resource.newResource можно указать ресурс. 

Спасибо за ответ. Теперь работает загрузка из ресурсов.
Код

// Работает. Загрузка указанного места файловой системы.
sslContextFactory.setKeyStorePath("/media/src/java/WebApiService/src/main/resources/jetty-ssl.keystore");
// Работает. Загрузка из ресурсов, вариант 1.
sslContextFactory.setKeyStoreResource(Resource.newResource(System.class.getResource("/resources/jetty-ssl.keystore")));
// Работает. Загрузка из ресурсов, вариант 2.
sslContextFactory.setKeyStorePath(System.class.getResource("/resources/jetty-ssl.keystore").toExternalForm());


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)