通过任何SSL或TLS版本进行的HTTPS连接

时间:2018-10-24 13:34:46

标签: ssl sslhandshakeexception

我正在尝试对其他服务器实施基于SSL的HTTPS连接。

我需要提供所有协议(TLSv1.0TLSv1.1TLSv1.2TLSv1.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消息进行协商,直到他们同意二人组支持的协议版本为止。为了实现这种协商,我必须在源代码中实现它吗?

0 个答案:

没有答案