美文网首页
解决javax.net.ssl.SSLProtocolExcep

解决javax.net.ssl.SSLProtocolExcep

作者: 南葫芦羊 | 来源:发表于2019-10-12 11:31 被阅读0次

在使用android4.4的手机时,请求https接口发现抛出了此异常,因为在android4.4及以下的手机默认会关闭tls1.1或者tls1.2的支持,所以我们需要手动去开启对tls1.1和tls1.2的支持。

解决办法如下(部分代码):

 ```

```mBuilder =new OkHttpClient.Builder();

//    OkHttpClient.Builder的配置代码省略

//android4.4及以下的手机默认不支持tls1.1或者tls1.2,需要手动开启

if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {

    SSLContext sslContext =null;

    try {

sslContext = SSLContext.getInstance("TLS");

        try {

sslContext.init(null, null, null);

        }catch (KeyManagementException e) {

e.printStackTrace();

        }

}catch (NoSuchAlgorithmException e) {

e.printStackTrace();

    }

SSLSocketFactory socketFactory =new Tls12SocketFactory(sslContext.getSocketFactory());

    mBuilder.sslSocketFactory(socketFactory, new UnSafeTrustManager());

}

public class Tls12SocketFactoryextends SSLSocketFactory {

private static final String[]TLS_SUPPORT_VERSION = {"TLSv1.1", "TLSv1.2"};

    final SSLSocketFactorydelegate;

    public Tls12SocketFactory(SSLSocketFactory base) {

this.delegate = base;

    }

@Override

    public String[]getDefaultCipherSuites() {

return delegate.getDefaultCipherSuites();

    }

@Override

    public String[]getSupportedCipherSuites() {

return delegate.getSupportedCipherSuites();

    }

@Override

    public SocketcreateSocket(Socket s, String host, int port, boolean autoClose)throws IOException {

return patch(delegate.createSocket(s, host, port, autoClose));

    }

@Override

    public SocketcreateSocket(String host, int port)throws IOException, UnknownHostException {

return patch(delegate.createSocket(host, port));

    }

@Override

    public SocketcreateSocket(String host, int port, InetAddress localHost, int localPort)throws IOException, UnknownHostException {

return patch(delegate.createSocket(host, port, localHost, localPort));

    }

@Override

    public SocketcreateSocket(InetAddress host, int port)throws IOException {

return patch(delegate.createSocket(host, port));

    }

@Override

    public SocketcreateSocket(InetAddress address, int port, InetAddress localAddress, int localPort)throws IOException {

return patch(delegate.createSocket(address, port, localAddress, localPort));

    }

private Socketpatch(Socket s) {

if (sinstanceof SSLSocket) {

((SSLSocket) s).setEnabledProtocols(TLS_SUPPORT_VERSION);

        }

return s;

    }

}

public class UnSafeTrustManagerimplements X509TrustManager {

@Override

    public void checkClientTrusted(X509Certificate[] chain, String authType)

throws CertificateException

{

}

@Override

    public void checkServerTrusted(X509Certificate[] chain, String authType)

throws CertificateException

{

}

@Override

    public X509Certificate[]getAcceptedIssuers()

{

return new X509Certificate[]{};

    }

}```

 ```

相关文章

  • 解决javax.net.ssl.SSLProtocolExcep

    在使用android4.4的手机时,请求https接口发现抛出了此异常,因为在android4.4及以下的手机默认...

  • 【解决】

    解决理想 解决生活 解决让我平凡的错 解决孤单 解决折磨 解决一开始就着了的魔 解决饥饿 解决战火 解决核时代被抽...

  • 报错集锦

    问题一: 解决: 问题二: 解决: 问题三: 解决: 问题四: 解决: 问题五: 解决:

  • 解决 问题 解决

    你解决一个问题,就像当于解决无数个问题。听到这句话的时候我已经毕业了。回想之前的学习经历,一张试卷,碰到难题就放那...

  • some

    枪解决了, 炮解决了, 人解决了, 衣服解决了, 时间解决了, 地方解决了, 就看着车马飞驰, 结局降临, 吾事已毕。

  • 我还是在这里

    生活不能解决的事情,日记可以解决;日记不能解决的事情,思想可以解决;思想不能解决的事情,放空可以解决;放...

  • 页面布局(三栏布局)

    浮动解决方案 绝对定位解决方案 flexbox解决方案 表格布局解决方案 网格布局解决方案

  • 忙起来

    忙碌,能解决很多问题 解决你胡思乱想的问题 解决你彷徨迷茫的问题 解决你痴心妄想的问题 解决你自卑弱小的问题 解决...

  • ……纵情沉浸于清愁与静谧吧

    生活不能解决的事情,日记可以解决;日记不能解决的事情,思想可以解决;思想不能解决的事情,放空可以解决;放空不...

  • 《慧杰语录》——每日必读

    劳动,解决吃饭的问题。 工作,解决生存的问题。 能力,解决存在的问题。 素质,解决关系的问题。 奋斗,解决态度的问...

网友评论

      本文标题:解决javax.net.ssl.SSLProtocolExcep

      本文链接:https://www.haomeiwen.com/subject/tjcqmctx.html