У нас есть java-приложение, которое работает на Java Version: 1.7.0_80, и мы пытаемся включить TLSv1.2 с аргументом jvm -Dhttps.protocols=TLSv1.1,TLSv1.2
-Djdk.tls.client.protocols=TLSv1.1,TLSv1.2-Ddeployment.security.TLSv1=false
-Ddeployment.security.TLSv1.1=true
-Ddeployment.security.TLSv1.2=true для использования веб-службы, которая поддерживает только TLSv1.2. Хотя у нас есть Java-клиент с аргументом jvm, все еще использующий TLSv1 для связи с веб-службами,
может кто-нибудь помочь мне, есть ли какие-либо конфигурации jvm, которые мне нужно сделать, чтобы использовать TLSv1.2 без изменения кода?
Я пытаюсь заставить его работать только с изменениями конфигурации в моем случае, без изменения кода
Насколько я понимаю, нет. Вам нужно либо обновить Java 7 до последнего патча (я думаю, это 131), либо внести изменения в код.
@SergeiSirik: на самом деле не дубликат. В вопросе, который вы упомянули, нет ответа, чтобы указать реальную причину, по которой он не работал: "" системное свойство jdk.tls.client.protocols. Это свойство доступно начиная с Java SE 7u95 ".
это протокол https для вызова веб-службы




Без изменения кода, как я написал в комментарии, вам понадобится как минимум 7u95.
jdk.tls.client.protocols system property. To enable specific SunJSSE protocols on the client, specify them in a comma-separated list within quotation marks; all other supported protocols are then disabled on the client. For example, if the value of this property is "TLSv1,TLSv1.1", then the default protocol settings on the client for TLSv1 and TLSv1.1 are enabled on the client, while SSLv3, TLSv1.2, and SSLv2Hello are disabled on the client. This propery has been available since Java SE 7u95.
Это свойство также доступно, начиная с Java 6u121, при этом Java 6 поддерживает и реализует TLS 1.2.
Java 7u95 доступна только для бизнес-пользователей. Недоступно для простых пользователей. Думаю, изначально вопрос был о том, как включить TLSv1.2 в Java 7u80. Может ли кто-нибудь помочь с включением TLSv1.2 в 7u80?
Вопрос действительно был для 7u80, и если вы не можете обновить, вам нужно изменить код (одно из решений, приведенных выше по ссылке Сергея Сирика).
К сожалению, код, указанный в ссылке, работает только для аутентификации sql. Не для проверки подлинности Windows.
Речь идет о включении TLS 1.2. Если у вас возникли трудности с аутентификацией Windows, либо предоставьте код и задайте вопрос по SO, либо спросите на ServerFault.
Судя по всему, Java 6u161 является «расширенной версией Java SE» и поэтому доступна только платным клиентам. См. stackoverflow.com/questions/45859426/…
@PerLindberg Вы, наверное, хотели сказать 6u121, и вы правы. Есть ли еще пользователи Java 6?
Да, 6у121, правильно. И да, я пока застрял на Java 6 / Glassfish 3.1.2.2. Так что мне нужно как-то пересадить на него TLS 1.2.
@PerLindberg Вам нужен TLS для работы в качестве клиента или сервера? Как сервер, может быть, вам подойдет просто установка обратного прокси перед Glassfish?
Это для сервера приложений Glassfish. TLS 1.2 должен поддерживаться к марту 2020 года, когда основные браузеры перестанут поддерживать TLS 1.1. Обратный прокси (например, Apache) - отличный обходной путь, но в моем конкретном случае он не подходит.
@PerLindberg У меня нет исходного кода Glassfish, чтобы проверить, как он вызывает классы SSL. Из того, что я знаю и протестировал на простых программах, вы можете установить поставщика BouncyCastle и запустить Java 6 с TLS 1.2. Чтобы загрузить файлы jar, отредактировать java.security и перезапустить сервер, потребуется 15 минут. Сообщите нам, сработало ли это.
Эжен, спасибо за предложение. Но это заняло больше 15 минут, так как я не знаком с этим видом магии. :-) Я загрузил и установил bc_fips-1.0.2.jar в ... jdk1.6.0_35 / jre / lib / ext и добавил 'security.provider.9 = org.bouncycastle.jsse.provider.BouncyCas tleJsseProvider' в ... jdk1.6.0_35 / jre / lib / security / java.security. Затем я перезапустил Glassfish. Никакой радости; браузер по-прежнему предупреждает об устаревшей версии TLS. Возможно, в моей консоли администратора Glasfish отсутствует какая-то настройка ...
@PerLindberg Я думаю, вам нужен bcprov-jdk15to18-164.jar (и bctls-jdk15to18-164.jar?), А не fips, и добавьте поставщика в первую позицию, затем он появится перед SUN JSSE. Все это экспериментально. Где можно скачать такую же Glassfish, как у вас?
Я попробовал использовать bcprov-jdk15to18-164.jar (из bouncycastle.org/latest_releases.html) и добавил security.provider.1 = org.bouncycastle.jce.provider.BouncyCast leProvider в java.security (и изменил нумерацию существующих провайдеров). Не помогло. Кажется, не существует файла .jar с bctls-jdk15to18-164, только файл .tar.gz с исходными кодами. Мне не пришлось его использовать, так как Glassfish запускается без него. Glassfish 3.1.2.2 можно скачать с oracle.com/java/technologies/ogs-v3122-downloads.html
@PerLindberg Взгляните на этот вопрос, который показывает, как объявить поставщика. Проверьте еще раз, я вижу bctls-jdk15to18-164.jar на странице последних выпусков.
Еще раз спасибо, @ Eugène. Я установил bctls-jdk15to18-164.jar и настроил двух поставщиков bouncycastle в java.security. наверное заставил Java TLS работать, но Glassfish не работает. Попытки подключения приводят к появлению сообщения журнала org.bouncycastle.jsse.provider.ProvTlsServer Server raised fatal(2) bad_record_mac(20) alert: Failed to process record org.bouncycastle.tls.TlsFatalAlert: bad_record_mac(20). Кроме того, переход на ssl.KeyManagerFactory.algorithm=PKIX не помог. По-видимому, потребуется еще немного эзотерической магии Стеклянной Рыбы.
@PerLindberg Могут помочь две вещи: добавление -Djavax.net.debug = all и сетевой захват. Возможно, откройте здесь новый вопрос, потому что ваш вопрос больше о Glassfish, чем о TLS1.2 на устаревшей JVM. Держите нас в курсе
Возможный дубликат Как включить TLS 1.2 в Java 7