【问题标题】:Android SSL TLS connection to XMPP serverAndroid SSL TLS 连接到 XMPP 服务器
【发布时间】:2015-05-24 03:11:55
【问题描述】:

我正在尝试连接到需要“加密(SSL 或 TLS)”的 XMPP 服务器。我无法使用 Smack 或其他第三方库(学校项目)

这是我初始化 SSL 套接字的 Java 代码:

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)

有谁知道问题出在哪里?

【问题讨论】:

    标签: android sockets ssl xmpp


    【解决方案1】:

    通过对XMPP core specification 的简短了解,您似乎无法简单地使用套接字并立即将其升级到 TLS。相反,您必须首先使用某种STARTTLS 命令,然后才能升级到 TLS。这类似于 SMTP、IMAP 等中的显式 TLS。

    更多详情请查看specification。你会发现一些简短的信息here

    【讨论】:

    • 确实解释了命令的最后一部分:openssl s_client -connect jabber.hot-chilli.net:5222 -starttls xmpp
    猜你喜欢
    • 1970-01-01
    • 2016-10-15
    • 2016-06-26
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 2020-03-21
    • 2013-10-07
    • 1970-01-01
    相关资源
    最近更新 更多