我有一个问题,当我想连接贝宝Rest与POST方法。当我不使用现代时,我得到了错误。
The authentication or decryption has failed. 但是当我使用现代化的Marshmallow时,它在Android API 23 (Marshmallow)中工作,当我在Android API 19 (设备)和Android API 16 (模拟器)中进行测试时,我得到了错误。
ex {Javax.Net.Ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=…} Javax.Net.Ssl.SSLHandshakeException根据ssl handshake exception android,我需要使用定制的套接字工厂。但是如何在HttpClient或modernHttpClient中实现它呢?
发布于 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之前的版本不会对您有所帮助。
发布于 2020-02-29 12:23:41
这是由于以下几个原因:
对于默认没有启用TLSV1.2的设备,可以强制使用TLv1.2。
来修复它,使用下面的代码作为异步调用.
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) {
}
});有关更多信息,请使用此参考
发布于 2017-08-10 13:28:08
您可以使用来自Google服务的ProviderInstaller,它将系统SSL提供程序替换为Google提供的最新的一个:
https://developer.android.com/training/articles/security-gms-provider.html
我在我的应用程序的onCreate()中初始化它,这个错误就消失了。我相信你能从萨马林那里做到这一点。
https://stackoverflow.com/questions/37222696
复制相似问题