Что нужно в урезанной JRE11 для подключения по SSL?

Я создал приложение Java, которое подключается к (различным общедоступным) удаленным серверам через SSL. Все отлично работает на моей машине разработки. Однако пользователь сообщил, что SSL-соединение не может быть установлено на его машине, и он получает эту ошибку:

C:\Program Files (x86)\Test>JRE\bin\java.exe --version
java 11.0.2 2019-01-15 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.2+9-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.2+9-LTS, mixed mode)

C:\Program Files (x86)\Test>JRE\bin\java.exe -jar Test.jar
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

Я отправляю свое приложение с модульной/урезанной JRE11. Поэтому, поскольку я не получаю эту ошибку на своем компьютере, а этот пользователь, я предполагаю, что мне не хватает необходимого модуля Java для поставляемой JRE.

Как я могу узнать, действительно ли это проблема и какой модуль отсутствует?

Обновлять:
Мне удалось воспроизвести ошибку на моей машине. Оказывается, с модульной JRE я получаю следующее исключение при попытке подключения через SSL:

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
java.base/sun.security.ssl.Alert.createSSLException(Unknown Source)
java.base/sun.security.ssl.Alert.createSSLException(Unknown Source)
java.base/sun.security.ssl.TransportContext.fatal(Unknown Source)
java.base/sun.security.ssl.Alert$AlertConsumer.consume(Unknown Source)
java.base/sun.security.ssl.TransportContext.dispatch(Unknown Source)
java.base/sun.security.ssl.SSLTransport.decode(Unknown Source)
java.base/sun.security.ssl.SSLEngineImpl.decode(Unknown Source)
java.base/sun.security.ssl.SSLEngineImpl.readRecord(Unknown Source)
java.base/sun.security.ssl.SSLEngineImpl.unwrap(Unknown Source)
java.base/sun.security.ssl.SSLEngineImpl.unwrap(Unknown Source)
java.base/javax.net.ssl.SSLEngine.unwrap(Unknown Source)
org.jboss.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1225)
org.jboss.netty.handler.ssl.SslHandler.decode(SslHandler.java:913)
org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:425)
org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:303)
org.jboss.netty.handler.traffic.AbstractTrafficShapingHandler.messageReceived(AbstractTrafficShapingHandler.java:408)
org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268)
org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255)
org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88)
org.jboss.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:109)
org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:328)
org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:90)
org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.base/java.lang.Thread.run(Unknown Source)

Но в этом сообщении об ошибке отсутствует класс. Какой модуль мне нужно добавить в мою урезанную JRE11?

Попросите пользователя установить флаг отладки SSL/сети и посмотреть/отправить вам вывод отладки. Вероятно, это неспособность согласовать версии SSL/TLS или наборы шифров.

Stephen C 20.05.2019 00:34

Какая операционная система и версия используется пользователем?

Basil Bourque 20.05.2019 01:01

Вы запускали автономное приложение, используемое вашим пользователем, на своем компьютере?

Basil Bourque 20.05.2019 01:02

используйте okhttp, он поддерживает все версии ssl и tls и различные наборы шифров, и я думаю, у вас не будет этой проблемы тогда

Mohsen fallahi 20.05.2019 01:11

@BasilBourque Спасибо за идею, я соответствующим образом обновил свой вопрос.

Matthias 21.05.2019 21:08
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
5
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошо, нашел недостающий модуль, это был jdk.crypto.ec.

Provides the implementation of the SunEC security provider.

Другие вопросы по теме