首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓4.4及更低版本的SSLHandshakeException

安卓4.4及更低版本的SSLHandshakeException
EN

Stack Overflow用户
提问于 2016-05-14 04:56:07
回答 5查看 8.7K关注 0票数 16

我有一个问题,当我想连接贝宝Rest与POST方法。当我不使用现代时,我得到了错误。

代码语言:javascript
复制
The authentication or decryption has failed. 

但是当我使用现代化的Marshmallow时,它在Android API 23 (Marshmallow)中工作,当我在Android API 19 (设备)和Android API 16 (模拟器)中进行测试时,我得到了错误。

代码语言:javascript
复制
ex {Javax.Net.Ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=…} Javax.Net.Ssl.SSLHandshakeException

根据ssl handshake exception android,我需要使用定制的套接字工厂。但是如何在HttpClient或modernHttpClient中实现它呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-05-19 15:14:39

我不确定我是否能完全回答你的问题,但我试试看:

如果您分析Paypal端点,例如使用SSL实验室(如so https://www.ssllabs.com/ssltest/analyze.html?d=api.sandbox.paypal.com&hideResults=on ),您会发现它们只支持TLS 1.2协议。

现在,Android确实支持这一点,因为API级别为16,正如您在这里看到的,https://developer.android.com/reference/javax/net/ssl/SSLSocket.html,但是默认情况下,它是禁用的,并且只有在API级别20+中才启用它。

在Xamarin论坛上,有人发布了一种解决方案,通过分叉ModernHttpClient和添加一个改进的SSL套接字工厂:https://forums.xamarin.com/discussion/63005/modernhttpclient-tls-1-2-android-api-19,为API级别为16至19的Android启用TLS1.2。

这应该可以解决那些Android版本的问题,但是在Android4.1之前的版本不会对您有所帮助。

票数 9
EN

Stack Overflow用户

发布于 2020-02-29 12:23:41

这是由于以下几个原因:

  1. 在旧的Android设备上,TLS 1.2的支持不够清晰。
  2. 设备制造商对官方的Android规格有不同的承诺,在他们的设备上运送TLS1.2
  3. 运营商和设备制造商对向客户提供软件和安全更新有不同的承诺。

对于默认没有启用TLSV1.2的设备,可以强制使用TLv1.2。

来修复它,使用下面的代码作为异步调用.

代码语言:javascript
复制
    ProviderInstaller.installIfNeededAsync(getApplicationContext(), new 
    ProviderInstaller.ProviderInstallListener() {
                @Override
                public void onProviderInstalled() {
                    SSLContext sslContext;
                    try {
                        sslContext = SSLContext.getInstance("TLSv1.2");
                        sslContext.init(null, null, null);
                        sslContext.createSSLEngine();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }

                @Override
                public void onProviderInstallFailed(int i, Intent intent) {

                }
            });

有关更多信息,请使用此参考

https://ankushg.com/posts/tls-1.2-on-android/

票数 3
EN

Stack Overflow用户

发布于 2017-08-10 13:28:08

您可以使用来自Google服务的ProviderInstaller,它将系统SSL提供程序替换为Google提供的最新的一个:

https://developer.android.com/training/articles/security-gms-provider.html

我在我的应用程序的onCreate()中初始化它,这个错误就消失了。我相信你能从萨马林那里做到这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37222696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档