Android 到 XMPP 服务器的 SSL TLS 连接
Android SSL TLS connection to XMPP server
我正在尝试连接到需要 "Encryption (SSL or TLS)" 的 XMPP 服务器。我不能使用 Smack 或其他第三方库(学校项目)
这是我的 Java 初始化 SSL 套接字的代码:
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
TrustManagerFactory trustManagerFactory=TrustManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(keyStore);
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustManagerFactory.getTrustManagers(), new SecureRandom());
socket = sslContext.getSocketFactory().createSocket(HOST, PORT);
socket.setKeepAlive(true);
如果我尝试在套接字上打开流:
socket.getOutputStream()
我收到这个错误:
javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x76cb46a0: Failure in SSL library, usually a protocol error
error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:766 0x72fb3d74:0x00000000)
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:448)
有谁知道问题出在哪里?
从 XMPP core specification 的简短浏览来看,您似乎无法简单地使用套接字并立即将其升级到 TLS。相反,您必须先使用某种 STARTTLS
命令,然后才能升级到 TLS。这类似于 SMTP、IMAP 等中的显式 TLS。
详情请见specification. Some shorter information you will find here。
我正在尝试连接到需要 "Encryption (SSL or TLS)" 的 XMPP 服务器。我不能使用 Smack 或其他第三方库(学校项目)
这是我的 Java 初始化 SSL 套接字的代码:
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
TrustManagerFactory trustManagerFactory=TrustManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(keyStore);
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustManagerFactory.getTrustManagers(), new SecureRandom());
socket = sslContext.getSocketFactory().createSocket(HOST, PORT);
socket.setKeepAlive(true);
如果我尝试在套接字上打开流:
socket.getOutputStream()
我收到这个错误:
javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x76cb46a0: Failure in SSL library, usually a protocol error
error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:766 0x72fb3d74:0x00000000)
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:448)
有谁知道问题出在哪里?
从 XMPP core specification 的简短浏览来看,您似乎无法简单地使用套接字并立即将其升级到 TLS。相反,您必须先使用某种 STARTTLS
命令,然后才能升级到 TLS。这类似于 SMTP、IMAP 等中的显式 TLS。
详情请见specification. Some shorter information you will find here。