#java #ssl
#java #ssl
Вопрос:
У меня есть тривиальная функция «проверить наличие обновлений» в моем настольном приложении, и все, что она делает, это в основном это:
var url = new URL(urlString);
var conn = url.openConnection();
var stream = conn.getInputStream();
// Just read the latest version number from the stream...
Когда я запускаю проверку обновлений из приложения, запущенного из моей IDE, оно работает так, как должно (с использованием JDK 15).
Однако, когда я запускаю проверку обновлений из развернутого приложения (exe-файл под Windows), он завершается ошибкой с исключением:
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at java.base/sun.security.ssl.Alert.createSSLException(Unknown Source)
at java.base/sun.security.ssl.Alert.createSSLException(Unknown Source)
at java.base/sun.security.ssl.TransportContext.fatal(Unknown Source)
at java.base/sun.security.ssl.Alert$AlertConsumer.consume(Unknown Source)
at java.base/sun.security.ssl.TransportContext.dispatch(Unknown Source)
at java.base/sun.security.ssl.SSLTransport.decode(Unknown Source)
at java.base/sun.security.ssl.SSLSocketImpl.decode(Unknown Source)
at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(Unknown Source)
at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
at myapp.UpdateChecker$checkNow$1.run(UpdateChecker.kt:30)
at java.base/java.lang.Thread.run(Unknown Source)
Недавно я переключился на плагин Gradle Badass Runtime для развертывания приложения, которое использует jlink amp; jpackage под капотом. Среда выполнения JRE, которую он создает, построена на основе того же JDK, который я использую для запуска приложения в моей IDE.
Я действительно понятия не имею, что может быть не так … кроме, возможно, пользовательского JRE, созданного Задирой, отсутствует какой-то компонент / сертификат …?
Я также включил -Djavax.net.debug=all
, и он выдал много отладочной информации, но я должен признать, что не могу по-настоящему разобраться в этом. Есть какая-то конкретная строка, которую я должен искать?
Ответ №1:
Хорошо, в стандартной / рекомендуемой конфигурации Badass действительно отсутствовал модуль. Я заставил его работать, добавив в список ‘jdk.crypto.cryptoki’.