Я знаю, что был задан вопрос о включении TLS 1.2 в Java 6, но я не нашел правильного решения.
Я пробовал также с поставщиком BouncyCastle, но не повезло. ..
Мне удалось заставить его работать, следуя подсказкам другого сайта с кодом:
package testTLS12;
import java.io.IOException;
import java.io.InputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.security.SecureRandom;
import org.bouncycastle.tls.CertificateRequest;
import org.bouncycastle.tls.DefaultTlsClient;
import org.bouncycastle.tls.TlsAuthentication;
import org.bouncycastle.tls.TlsClientProtocol;
import org.bouncycastle.tls.TlsCredentials;
import org.bouncycastle.tls.TlsServerCertificate;
import org.bouncycastle.tls.crypto.TlsCrypto;
import org.bouncycastle.tls.crypto.impl.bc.BcTlsCrypto;
public class TestHttpClient {
public static void main(String[] args) throws Exception {
SecureRandom secureRandom = new SecureRandom();
Socket socket = new Socket(InetAddress.getByName("tls-v1-2.badssl.com"), 1012);
TlsClientProtocol protocol = new TlsClientProtocol(socket.getInputStream(), socket.getOutputStream());
TlsCrypto crypto = new BcTlsCrypto(secureRandom);
DefaultTlsClient client = new DefaultTlsClient(crypto) {
public TlsAuthentication getAuthentication() throws IOException {
return new TlsAuthentication() {
@Override
public TlsCredentials getClientCredentials(CertificateRequest var1) throws IOException {
return null;
}
@Override
public void notifyServerCertificate(TlsServerCertificate var1) throws IOException {
}
};
}
};
protocol.connect(client);
OutputStream output = protocol.getOutputStream();
output.write("GET / HTTP/1.1\r\n".getBytes("UTF-8"));
output.write("Host: www.google.com\r\n".getBytes("UTF-8"));
output.write("Connection: close\r\n".getBytes("UTF-8")); // So the server will close socket immediately.
output.write("\r\n".getBytes("UTF-8")); // HTTP1.1 requirement: last line must be empty line.
output.flush();
InputStream input = protocol.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
String line;
while ((line = reader.readLine()) != null)
{
System.out.println(line);
}
socket.close();
}
}
, но это пользовательская манипуляция сокетом и т. Д. c. Я не могу включить целую JRE с TLS1.2 - это означает, что каждая библиотека, такая как JSoup или аналогичная, использующая SSLSocketFactory , также должна иметь возможность использовать TLS1.2
Использование «платного» версия JRE не вариант. Платная версия Я имею в виду все более Java 6u45. https://www.oracle.com/java/technologies/oracle-java-archive-downloads.html - Текущие выпуски обновлений для JDK 6 и JDK 7 доступны для клиентов поддержки.
Обновление до Java 8 также не вариант.
Я пробовал класс TSLSocketConnectionFactory
из Как использовать TLS 1.2 в Java 6 , но не повезло ...
Кто-нибудь сделал это с рабочим кодом