Pie*_*rre 10 rest ssl https android openssl
我在Android应用程序上使用HTTPS调用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)
Run Code Online (Sandbox Code Playgroud)
该应用程序使用Apache类与REST服务进行交互.即使使用接受任何类型证书的虚拟TrustManager,我也会收到此错误.
从Android Navigator调用REST服务时,连接成功建立并正常工作.
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源代码除了低级问题之外没有给我任何提示.
有关如何进一步调试的任何建议吗?
Pie*_*rre 17
好的,我发现了问题所在.
根据建议使用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
Run Code Online (Sandbox Code Playgroud)
该-servername选项包括服务器名称指示(SNI),以确保服务器托管多个站点时服务器提供正确的证书.SNI是TLS 1.0(及以上)选项,-tls1_1并且-tls1_2通常也可以使用.
然后显示关于刚刚打开的SSL连接的卡车负载信息.
| 归档时间: |
|
| 查看次数: |
8966 次 |
| 最近记录: |