В процессе моей трудовой деятельности возникла следующая задача:

Серверное приложение общается с Solr по SSL соединению. Есть автотесты которые в процессе тестирования должны выполнить несколько запросов к Solr, используя ApacheHTTP 4.2 Lib.  Как заставить всё это работать без отключения SSL?

Оказалось всё довольна просто:

1) У приложения были скопированы ключи, которые оно использует для соединения. А так же пароли.

2) Прочитан вот этот малюсенький мануал. Как видно из мануала java может работать с разнообразными алгоритмами шифрования.

3) После чего был написан довольно простой код, который был добавлен в метод  @BeforeTest .

  1. String path = System.getProperty("user.dir").replace('\\','/')+"/data-folder/ssl_keys/";
  2. System.setProperty("javax.net.ssl.keyStoreType", "JCEKS");
  3. System.setProperty("javax.net.ssl.keyStore",path+"ssl.repo.client.keystore");
  4. System.setProperty("javax.net.ssl.keyStorePassword",ssl_keyStore_pass);
  5. System.setProperty("javax.net.ssl.trustStoreType", "JCEKS");
  6. System.setProperty("javax.net.ssl.trustStore",path+"ssl.repo.client.truststore");
  7. System.setProperty("javax.net.ssl.trustStorePassword",ssl_trustStore_pass);

Данный код перед началом теста получает path до каталога в котором лежат файлы-ключи. А затем выставляет необходимые системные переменные, которые java использует при работе по SSL. Думаю тут всё понятно. После выставления этих опций Apache Http без каких либо дополнительных танцов с бубном начала работать как надо.

4) Ну а в метод @AfterTest был добавлен код, для обнуления этих опций… На всякий случай.

  1. System.clearProperty("javax.net.ssl.keyStore");
  2. System.clearProperty("javax.net.ssl.keyStorePassword");
  3. System.clearProperty("javax.net.ssl.keyStoreType");
  4. System.clearProperty("javax.net.ssl.trustStore");
  5. System.clearProperty("javax.net.ssl.trustStorePassword");

Так же задать опции для SSL можно и в JAVA_OPTS при старте приложения. Выглядеть это будет вот так:

java -jar -Djavax.net.ssl.keyStoreType=JCEKS -Djavax.net.ssl.keyStore= ... iobaProgram.jar

Чуть не забыл самое важное:

-Djavax.net.debug=ssl

Так же советую почитать вот этот мануал.

Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Яндекс