1

Можно ли включить TLS 1.2 в файле .jnlp для загрузки .jar с HTTPS-сервера, где установлен только TLS 1.2? Я пробовал во многих отношениях:

<resources> 
    <j2se (...) />
    <jar (...) />
    <property name="deployment.security.TLSv1.2" value="true" />
    <property name="jnlp.deployment.security.TLSv1.2" value="true" />
    <property name="java.deployment.security.TLSv1.2" value="true" />
    <property name="https.protocols" value="TLSv1.2" />
    <property name="jnlp.https.protocols" value="TLSv1.2" />
    <property name="javaws.https.protocols" value="TLSv1.2" />
    </property>
</resources>

но ни одна из них не работает - во время запуска jnlp (загрузка .jar) я получаю исключение:

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1959)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1077)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java
(...)


Если я установлю параметр «Использовать TLS 1.2» в панели управления Java, все будет работать - я могу скачать jar, и мое приложение запустится успешно. Но я хотел бы включить TLS 1.2 в файле jnlp независимо от настроек в JCP, потому что многие из моих клиентов все еще используют Java 7, и я хотел бы сделать это без их действий.


ОБНОВЛЕНИЕ:
Вот фрагмент (конец) вкладки Консоль, когда я запускаю jnlp с помощью команды:
javaws -J-Djavax.net.debug = все FILE.jnlp:

Java Web Start 10.51.2.13
Using JRE version 1.7.0_51-b13 Java HotSpot(TM) 64-Bit Server VM
User home directory = 

(...)

[Raw read]: length = 5
0000: 15 03 03 00 02                                     .....
[Raw read]: length = 2
0000: 02 28                                              .(
Thread-8, READ: TLSv1.2 Alert, length = 2
Thread-8, RECV TLSv1 ALERT:  fatal, handshake_failure
Thread-8, called closeSocket()
[Raw read]: length = 5
Thread-8, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
0000: 15 03 03 00 02                                     .....
[Raw read]: length = 2
0000: 02 28                                              .(
Thread-7, READ: TLSv1.2 Alert, length = 2
Thread-7, RECV TLSv1 ALERT:  fatal, handshake_failure
Thread-7, called closeSocket()
Thread-7, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
#### Java Web Start Error:
#### Unable to load resource: https://ADDRESS/FILE.jar

ADDRESS/FILE.jar существует (как я уже говорил в основном посте) - если я включу «Использовать TLS 1.2», файл загрузится ОК.

1 ответ1

0

К сожалению, я думаю, что вы застряли с решением панели управления Java. Причина этого заключается в том, что клиент и сервер должны установить взаимно совместимый набор шифров как часть рукопожатия TLS. В этом случае ваша локальная среда выполнения Java является «клиентом», а ее настройки набора шифров регулируются панелью управления. Конфигурация JNLP не может изменить это на лету, и на то есть веская причина. Представьте себе обратную ситуацию, в которой клиент вынужден принимать шифр с более низким уровнем безопасности.

Например, предположим, что ваш сервер поддерживает TLS 1.2 и TLS 1.1 (в таком порядке предпочтений). Если ваш клиент поддерживает только TLS 1.0 и SSL v2, тогда не существует взаимоприемлемого набора шифров, и рукопожатие не выполняется. Рукопожатие успешно, только если ваш клиент поддерживает TLS 1.1, TLS 1.2 или оба. Обратите внимание, что порядок не имеет значения для клиента, так как сервер хочет использовать максимально возможный уровень безопасности, который поддерживает клиент.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .