关于Android4.x系统支持TLS1.2的解决方案
来源:互联网 发布:文明5 mac steam 汉化 编辑:程序博客网 时间:2024/04/29 12:13
为Http请求的网络客户端设置一个特殊的SSLSocketFactory。
这个代理SSLSocketFactory在创建一个Socket连接的时候,会设置Socket的可用的TLS版本。
private static final String[] TLS_SUPPORT_VERSION = {"TLSv1.1", "TLSv1.2"}; ((SSLSocket) s).setEnabledProtocols(TLS_SUPPORT_VERSION);
代理类如下:
public class Tls12SocketFactory extends SSLSocketFactory { private static final String[] TLS_SUPPORT_VERSION = {"TLSv1.1", "TLSv1.2"}; final SSLSocketFactory delegate; public Tls12SocketFactory(SSLSocketFactory base) { this.delegate = base; } @Override public String[] getDefaultCipherSuites() { return delegate.getDefaultCipherSuites(); } @Override public String[] getSupportedCipherSuites() { return delegate.getSupportedCipherSuites(); } @Override public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException { return patch(delegate.createSocket(s, host, port, autoClose)); } @Override public Socket createSocket(String host, int port) throws IOException, UnknownHostException { return patch(delegate.createSocket(host, port)); } @Override public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException, UnknownHostException { return patch(delegate.createSocket(host, port, localHost, localPort)); } @Override public Socket createSocket(InetAddress host, int port) throws IOException { return patch(delegate.createSocket(host, port)); } @Override public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException { return patch(delegate.createSocket(address, port, localAddress, localPort)); } private Socket patch(Socket s) { if (s instanceof SSLSocket) { ((SSLSocket) s).setEnabledProtocols(TLS_SUPPORT_VERSION); } return s; }}
HttpsUrlConnection
SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, null, null); SSLSocketFactory socketFactory = new Tls12SocketFactory(sslContext.getSocketFactory());HttpsUrlConnection.setDefaultSSLSocketFactory(socketFactory)
OkHttp
OkHttpClient.Builder builder = new OkHttpClient.Builder() .connectTimeout(20 * 1000, TimeUnit.MILLISECONDS) .readTimeout(20 * 1000, TimeUnit.MILLISECONDS); SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, null, null); SSLSocketFactory socketFactory = new Tls12SocketFactory(sslContext.getSocketFactory()); builder.sslSocketFactory(socketFactory, xtm); okHttpClient = builder.build();
0 1
- 关于Android4.x系统支持TLS1.2的解决方案
- Xutils 如何增加TLS1.2的支持
- 关于stripe TLS1.2
- eclipse插件支持tls1.2
- Android4.x系统设置字体大小导致应用布局混乱的解决方案
- 从零开始构建支持TLS1.2的Web服务器Linux版(一) 配置JAVA环境
- 从零开始构建支持TLS1.2的Web服务器Linux版(二) 配置Tomcat环境
- 从零开始构建支持TLS1.2的Web服务器Linux版(四)配置FTP环境
- 关于网上解决Android4.x系统设置字体大小导致应用布局混乱引起的问题
- 关于Android4.x系统默认显示方向各种修改
- c# .net 4.0 HttpWebRequest 访问https TLS1.2 解决方案
- 发送基于TLS1.2的HTTPS请求
- 从零开始构建支持TLS1.2的Web服务器Linux版(三)创建安装免费的HTTPS证书
- 从零开始构建支持TLS1.2的Web服务器Linux版(五)选装-MySql(yum安装方式)
- 从零开始构建支持TLS1.2的Web服务器Linux版(六)选装-Redis(src安装方式)
- 关于Android4.0之后主线程无法访问网络的解决方案
- 关于Android4.X后监听开机广播的一些记录
- 关于开发工具无法连接android4.x机子的问题
- 60 leetcode - Length of Last Word
- 收藏文章
- Java网络编程---回显聊天
- SpringBoot如何导入自定义配置的yml文件
- xcode 11db 调试台调试方法
- 关于Android4.x系统支持TLS1.2的解决方案
- Linux C 编程
- 图像匹配---(Python)
- Jackson Json进行JSON解析和序列化
- C语言学习总结(四)——数据结构
- MySQL 触发器、事务、正则查询
- SpringMVC入门(二)
- 氨基酸三字母转一个字母
- 61 leetcode - Spiral Matrix