Android 4.1至4.4 KitKat-为API启用TLS 1.2

Android 4.1至4.4 KitKat-为API启用TLS 1.2,第1张

概述在尝试禁用TLS1.0时,有些KitKat设备需要访问我的API.我尝试覆盖默认的套接字工厂,但没有成功.我试过转换为okhttp.还是行不通.如何获得AndroidKitKat连接到我的API?解决方法:我在棒棒糖之前的设备上也遇到过同样的问题.当我使用Retrofit时,这是OkHttp的解决方案.Tls12SocketFacto

在尝试禁用TLS 1.0时,有些KitKat设备需要访问我的API.我尝试覆盖默认的套接字工厂,但没有成功.我试过转换为okhttp.还是行不通.如何获得Android KitKat连接到我的API?

解决方法:

我在棒棒糖之前的设备上也遇到过同样的问题.当我使用Retrofit时,这是Okhttp的解决方案.

Tls12SocketFactory.java:

public class Tls12SocketFactory extends SSLSocketFactory {    private static final String[] TLS_V12_ONLY = {"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_V12_ONLY);        }        return s;    }}

OkhttpUtils.java:

public class OkhttpUtills {    public static OkhttpClIEnt createhttpClIEnt() {        httpLoggingInterceptor logging = new httpLoggingInterceptor();        logging.setLevel(httpLoggingInterceptor.Level.BODY);        OkhttpClIEnt.Builder clIEnt = new OkhttpClIEnt.Builder()                .followRedirects(true)                .followSslRedirects(true)                .addInterceptor(logging)                .cache(null)                .connectTimeout(15, TimeUnit.SECONDS)                .writeTimeout(15, TimeUnit.SECONDS)                .readTimeout(15, TimeUnit.SECONDS);        return enableTls12OnPreLollipop(clIEnt).build();    }    /**     * Enables TLSv1.2 protocol (which is Disabled by default)     * on pre-Lollipop devices, as well as on Lollipop, because some issues can take place on Samsung devices.     *     * @param clIEnt OKHtp clIEnt builder     * @return     */    private static OkhttpClIEnt.Builder enableTls12OnPreLollipop(OkhttpClIEnt.Builder clIEnt) {        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN && Build.VERSION.SDK_INT < Build.VERSION_CODES.LolliPOP_MR1) {            try {                SSLContext sc = SSLContext.getInstance("TLSv1.2");                sc.init(null, null, null);                clIEnt.sslSocketFactory(new Tls12SocketFactory(sc.getSocketFactory()));                Connectionspec cs = new Connectionspec.Builder(Connectionspec.MODERN_TLS)                        .tlsversions(Tlsversion.TLS_1_2)                        .build();                List<Connectionspec> specs = new ArrayList<>();                specs.add(cs);                specs.add(Connectionspec.COMPATIBLE_TLS);                specs.add(Connectionspec.CLEARTEXT);                clIEnt.connectionspecs(specs);            } catch (Exception exc) {                Log.e("OkhttpTLSCompat", "Error while setting TLS 1.2", exc);            }        }        return clIEnt;    }}

希望这可以对您有所帮助.

总结

以上是内存溢出为你收集整理的Android 4.1至4.4 KitKat-为API启用TLS 1.2全部内容,希望文章能够帮你解决Android 4.1至4.4 KitKat-为API启用TLS 1.2所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1091665.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存