TLS 1,2 дюйма Java 6 - PullRequest
       47

TLS 1,2 дюйма Java 6

1 голос
/ 06 марта 2020

Я знаю, что был задан вопрос о включении 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 , но не повезло ...

Кто-нибудь сделал это с рабочим кодом

...