2016-11-25 16 views
0

я делаю HttpsURLConnection, как показано ниже:HttpsURLConnection показать предупреждение системы безопасности Диалог, а не поймать исключение

 try 
     { 
      URL url = new URL(host); 
      HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); 
      connection.connect(); 
      logger.debug(httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK); 
     } 
     catch (Exception ex) 
     { 
      logger.error(ex.getMessage()); 
     } 

host я тестировал не имеет действительный сертификат, поэтому, когда я тестировал в Eclipse, это поймать SSLHandshakeException которой его хорошо.

Однако, когда я развертывается как WebStart, он не идет, чтобы поймать положение, но показывая мне диалоговое окно с предупреждением вместо:

enter image description here

Если пользователь нажмите кнопку Продолжить, он проходит connect() успешно.

Есть ли в любом случае, что я могу поймать исключение вместо того, чтобы позволить пользователю нажать «Продолжить» в этом диалоговом окне?

ответ

2

Чтобы отключить в диалоговом окне используйте:

connection.setAllowUserInteraction(false);

Теперь вы должны получить исключение немедленно, если JVM не устраивает с сертификатом.

+0

это похоже на действительную настройку, спасибо! к сожалению, я попробую еще раз, так как я уже нашел обходное решение, не вызвав «connect», но сделав вместо этого запрос API (например, ping) и успешно поймал исключение, если сбой –

2

Java WebStart затыкает свои собственные SSLSocketFactory

От https://docs.oracle.com/javase/tutorial/deployment/webstart/security.html

Dynamic Загрузка HTTPS сертификатов

Java Web Start динамически импортирует сертификаты как браузеры обычно делают. Для этого Java Web Start устанавливает свой собственный https-обработчик, используя свойства системы java.protocol.handler.pkgs , чтобы инициализировать значения по умолчанию для SSLSocketFactory и HostnameVerifier. Он устанавливает значения по умолчанию с помощью методов HttpsURLConnection.setDefaultSSLSocketFactory и HttpsURLConnection.setDefaultHostnameVerifier.

Если ваше приложение использует эти два метода, убедитесь, что они вызываются после того, как Java Web Start инициализирует обработчик HTTPS, в противном случае пользовательский обработчик будет заменен на Java Web Start обработчика по умолчанию.

Вы можете убедиться, что ваше собственное индивидуальное SSLSocketFactory и HostnameVerifiter используются, выполнив одно из следующих действий:

Установите свой собственный обработчик протокола HTTPS, чтобы заменить Java Web Start HTTPS обработчик. В вашем приложении вызывается HttpsURLConnection.setDefaultSSLSocketFactory или HttpsURLConnection.setDefaultHostnameVerifier только после создания первого URL-адреса https, который сначала запускает код инициализации обработчика Java Web Start https .

Вы можете быть в состоянии вернуться в ваш код с

SSLContext context = SSLContext.getInstance("TLS"); 
HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory()); 

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

+0

спасибо, очень полезная информация, теперь я знаю, почему она не работает должным образом с помощью Webstart. Тем не менее, я havent попробовал это, так как нашел другое обходное решение. Копаем глубже этот подход. –