Как использовать TLSV1 или SSLV3 для первого рукопожатия (Client Hello) в Java? - PullRequest
6 голосов
/ 17 июня 2011

Когда я выполняю следующий код, почему первое рукопожатие SSLv2, а не TLSv1 или SSLv3?

Как использовать TLSV1 или SSLV3 для первого рукопожатия в Java?

String host = "www.google.com";
String url = "/adsense/?sourceid=aso&subid=ZH_CN-ET-AS-ADSBY6&medium=link&hl=zh_CN";
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(new KeyManager[0], new TrustManager[] {new DefaultTrustManager()}, new SecureRandom());
SSLContext.setDefault(ctx);
SSLSocketFactory factory = ctx.getSocketFactory();
Socket socket = factory.createSocket(host, 443);
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out.write("GET " + url + " HTTP/1.0");
out.flush();
out.close();
in.close();

Ответы [ 3 ]

17 голосов
/ 14 февраля 2012

Для TLSv1: запуск клиентской jvm с

-Dhttps.protocols="TLSv1" 

или с использованием

System.setProperty("https.protocols", "TLSv1");

решил проблему для меня.

8 голосов
/ 21 июня 2011

Использование SSLSocket:

SSLSocket socket = factory.createSocket(host, 443);
String[] newProtocols = {"TLSv1"};
socket.setEnabledProtocols(newProtocols);
0 голосов
/ 12 ноября 2013

Какую версию Java вы используете? Кроме того, как вы говорите, он использует SSLv2? По умолчанию Java 1.6 будет использовать TLSv1. Здесь есть одна загвоздка: если вы включите debug ssl, вы можете увидеть, что используется формат SSLv2Hello, но если вы внимательно посмотрите, «версия протокола» внутри слоя записи будет TLSv1 (1.e версия информации о версии в формате SSLv2). Анализ захвата пакета на уровне TCP с использованием wireshark должен это подтвердить. Если вы хотите инициировать в формате TLSv1, установите только https.protocols = TLSv1 (это может повлиять на все исходящие вызовы ssl) ИЛИ установите этот конкретный сокет, как описано выше. Обратите внимание, что даже если у вас список из пяти запятых (например, https.protocols = SSLv3, TLSv1), он будет начинаться с TLSv1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...