Я пытаюсь реализовать HTTPS-соединение на основе SSL с другими серверами.
Мне нужно предоставить все протоколы (TLSv1.0
, TLSv1.1
, TLSv1.2
, TLSv1.3
) и в зависимости от того, что доступно иливключен, он должен иметь возможность согласовать эту версию самой.
В настоящее время это что-то вроде этого:
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, /*some certs*/, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
String webServicePath =" https://google.com" //suppose
URL url = new URL(webServicePath);
HttpsURLConnection httpsCon = (HttpsURLConnection) url.openConnection();
httpsCon.setRequestMethod("POST");
httpsCon.setRequestProperty("Content-Type", "application/json");
httpsCon.setRequestProperty("Content-Language", "en-US");
httpsCon.setUseCaches(false);
httpsCon.setDoInput(true);
httpsCon.setDoOutput(true);
httpsCon.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
httpsCon.connect();
Я хочу что-то вроде: SSLContext.getInstance ("TLSv1.0, TLSv1.1, TLSv1.2 "); , но я не уверен, что этот метод принимает несколько аргументов.
Я нашел решения: Dhttps.protocols = TLSv1.2, TLSv1.1, TLSv1 »при запуске Java VM или в коде, эквивалентная директива системного свойства -« System.setProperty («https.protocols», «TLSv1.2, TLSv1.1, TLSv1») ».
Я хочу сделать это программно в своем коде, но я понятия не имею, как.
Я прочитал, что клиент и сервер согласовывают сообщение HELLO, пока они не согласовывают поддерживаемую версию протокола дуэтом.Чтобы добиться этого согласования, я должен реализовать его в исходном коде?