Android上HTTPS连接的未知协议错误

Posted

技术标签:

【中文标题】Android上HTTPS连接的未知协议错误【英文标题】:Unknown protocol error with HTTPS connection on android 【发布时间】:2012-07-31 16:13:36 【问题描述】:

我正在使用 HTTPS 在 android 应用程序上调用 REST 服务。我已经有这方面的工作代码,但现在我使用的是新安装的托管 REST 服务的服务器,我无法再建立连接。

这里是个例外:

javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x15b7768: Failure in SSL library, usually a protocol error
error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:683 0x402e5cc3:0x00000000)

应用程序使用 Apache 类与 REST 服务进行交互。即使使用接受任何类型证书的虚拟 TrustManager,我也会收到此错误。

从 Android Navigator 调用 REST Service 时,连接已成功建立并且工作正常。

Android 手机运行 HTC 最新的 4.0.3 Android。

REST 服务是 Apache 上的托管 mod_perl 应用程序,配置了 SSL 支持。

在https://github.com/android/platform_external_openssl/blob/ics-mr0/ssl/s23_clnt.c 浏览 OpenSSL 源代码除了低级问题之外没有给我任何提示。

关于如何进一步调试的任何建议?

【问题讨论】:

可能欺骗:***.com/questions/6735408/… 您是否检查过新服务器是否正确安装了 SSL 证书? 同时连接 openssl s_client 并查看服务器发送的内容。 【参考方案1】:

好的,我找到了问题所在。

按照使用 OpenSSL s_client 的建议,我意识到我使用了错误的端口号进行连接。新服务器使用的是标准 SSL 端口,而我之前使用的其他服务器并非如此。

由于服务器没有根据 SSL 协议响应,因此 OpenSSL 无法对响应进行有意义的解码,因此Unknown Protocol Error

对于想知道我如何使用 OpenSSL s_client(在你的 shell 中)的人:

$ openssl s_client -connect myhost.example.com:443 -tls1 -servername myhost.example.com

-servername 选项加入Server Name Indication (SNI) 以确保在服务器上托管多个站点时服务器提供正确的证书。 SNI 是 TLS 1.0(及更高版本)选项,-tls1_1-tls1_2 通常也可以工作。

然后显示大量有关刚刚打开的 SSL 连接的信息。

【讨论】:

另见Which Cipher Suites to enable for SSL Socket?。 Java 在其SSLSocketFactory 中有一些令人讨厌的隐藏行为;和SSLSocketFactoryEx 确保协议和密码套件是“可接受的”(根据“可接受”的现代定义)。

以上是关于Android上HTTPS连接的未知协议错误的主要内容,如果未能解决你的问题,请参考以下文章

curl: (35) 首次请求时连接出现未知 SSL 协议错误

Android xmpp错误主机未知

Snowflake Python Pandas 连接器 - 使用 fetch_pandas_all 的未知错误

(未知 url)的 Http 失败响应:android 上的 0 未知错误

Ubuntu18.04 连接不上摄像头,断开连接显示未知错误

Ubuntu18.04 连接不上摄像头,断开连接显示未知错误