10

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)

アプリケーションはApacheクラスを使用してRESTサービスと対話します。あらゆる種類の証明書を受け入れるダミーのTrustManagerを使用している場合でも、このエラーが発生します。

Android NavigatorからRESTサービスを呼び出すと、接続が正常に確立され、正常に機能します。

Androidスマートフォンは、HTCの最新の4.0.3Androidを実行しています。

RESTサービスは、SSLサポートで構成されたApacheでホストされるmod_perlアプリケーションです。

https://github.com/android/platform_external_openssl/blob/ics-mr0/ssl/s23_clnt.cでOpenSSLソースコードを参照しても、低レベルの問題以外のヒントは得られません。

これをさらにデバッグする方法の提案はありますか?

4

1 に答える 1

17

わかりました、問題が何であるかを見つけました。

OpenSSL s_clientを使用するという提案に続いて、接続に間違ったポート番号を使用していることに気づきました。新しいサーバーは標準のSSLポートを使用していますが、以前使用していた他のサーバーには当てはまりませんでした。

サーバーがSSLプロトコルに従って応答していなかったため、OpenSSLによって応答を意味のある形でデコードできなかったため、Unknown Protocol Error

私がOpenSSLs_clientをどのように使用したかを知りたい人のために(あなたのシェルで):

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

この-servernameオプションは、サーバーで複数のサイトがホストされている場合にサーバーが正しい証明書を提供することを保証するために、サーバー名表示(SNI)を使用します。SNIはTLS1.0(およびそれ以降)のオプションであり-tls1_1-tls1_2通常は機能します。

次に、開いたばかりのSSL接続に関する情報のトラック負荷が表示されます。

于 2012-08-06T11:57:52.540 に答える