Как решить проблему рукопожатия в конвейере Jenkins при использовании jar, который вызывает API - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь построить конвейер jenkins, который автоматически запускается коммитом для git. В конвейере я выполняю файл .jar, который вызывает REST API. Сервер jenkins - это уже существующий сервер (ограниченный доступ для меня). В файле .jar я принимаю все сертификаты SSL как

try {
      // Create a trust manager that does not validate certificate chains
      final TrustManager[] trustAllCerts = new TrustManager[] {
          new X509TrustManager() {
            public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
            }

            public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
            }

            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                return new X509Certificate[0];
            }
          }
      };

, а затем установить его как

      System.setProperty("https.protocols", "SSLv3");
      final SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
      sslContext.init(null, trustAllCerts, new java.security.SecureRandom());

Вызов API работает нормально в моей локальной системе, а также в проекте freestyle на сервере Jenkins, но когда я пытаюсь создать конвейер, который делает это, он выдает

«Получено фатальное предупреждение: handshake_failure»

Пока яростно гуглял, я бегал

openssl s_client -connect myserver.com:443

на моей локальной машине и в конвейере Jenkins, и оба вернули

Новый, TLSv1 / SSLv3, шифр ECDHE-RSA-AES128-GCM-SHA256 Сервер публичный ключ - 2048 бит. Безопасное повторное согласование поддерживается IS Сжатие: НЕТ Расширение: NONE Нет ALPN, согласованная SSL-сессия:
Протокол: TLSv1.2
Шифр: ECDHE-RSA-AES128-GCM-SHA256
Идентификатор сеанса: 7CAB0E15710F2218A5B35D7819970AE062FFAAC85EFA87C3A534DEB668A7DA71
Session-ID-CTX:
Мастер-ключ: 88CA56C238E916226C7A13EC487069093E97540FD57B18814E43D2810FDDE046CCiableB67E05A0155AD775019B7EAB824
Key-Arg: нет
Идентификатор PSK: нет
Подлинная подсказка PSK: нет
Имя пользователя SRP: Нет
Время начала: 1536747840
Тайм-аут: 300 (сек)
Проверьте код возврата: 0 (нормально)

Мой сервер Jenkins использует JDK 1.7 (jar отлично работает в проекте фристайла) В решении этой проблемы будет признательна любая помощь.

1 Ответ

0 голосов
/ 14 сентября 2018

Из вашего комментария выше кажется, что проблема, с которой вы сталкиваетесь, заключается в том, что для вашей конвейерной сборки Java по какой-то причине работает с другим набором сконфигурированных наборов шифров.

Вы должны быть в состоянии решитьэто вызывая ваше Java-приложение с парой дополнительных параметров командной строки при выполнении его из вашего конвейера:

java -Ddeployment.security.SSLv3=true \
     -Ddeployment.security.TLSv1=true \
     -Ddeployment.security.TLSv1.1=true \
     -Ddeployment.security.TLSv1.2=true \
     -jar myapp.jar -whatever -other -flags -you -need
...