繁体   English   中英

带有 TLSv1.2 问题的 Android < 5.0 (Lollipop) 中的套接字握手

[英]Socket Handshake in Android < 5.0 (Lollipop) with TLSv1.2 problem

我使用以下代码创建到服务器的套接字并获取服务器公钥(服务器 TLS 版本为 1.2)。
问题出在 Android < 5.0 at socket.startHandshake();

catch error : javax.net.ssl.SSLException: Connection closed by peer.

我搜索了很多,发现我必须强制 Android < 5 使用 TLSv1.2,但我不能这样做( +++ )。

SSLSocketFactory factory = HttpsURLConnection.getDefaultSSLSocketFactory();
SSLSocket socket = (SSLSocket) factory.createSocket(hostname, 443);
socket.setSoTimeout(10000);
socket.startHandshake();
Certificate[] certs = socket.getSession().getPeerCertificates();
Certificate cert = certs[0];
PublicKey serverKey = cert.getPublicKey();

CertificateFactory cf      = CertificateFactory.getInstance("X.509");
InputStream        caInput = context.getResources().getAssets().open("filename.cert");
Certificate        ca;
ca = cf.generateCertificate(caInput);

if (String.valueOf(serverKey).equals(String.valueOf(ca.getPublicKey()))) {
     My codes ...
}

我怎样才能做到这一点? 谢谢。

您应该在 Android KitKat 及以下版本上强制使用 TLSv1.2,如下所示:

if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {
    socket.setEnabledProtocols(new String[]{"TLSv1.2"});
}

https://developer.android.com/reference/javax/net/ssl/SSLSocket.html

干杯!

最后,我必须将服务器 SSL 降级到 TLSv1 并解决问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM