2016-12-06 13 views
1

私はサーバーにさまざまなリクエストをしているアプリケーションを開発中です。私の携帯電話がアンドロイド6を実行していたとき、アプリケーションはサーバーにリクエストを行うことができましたが、Android 7にアップデートすると、サーバーとのハンドシェイクを実行できませんでした。Android 7のSSLException 6ではなく

javax.net.ssl.SSLHandshakeException: Handshake failed 
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:429) 
at com.android.okhttp.Connection.connectTls(Connection.java:235) 
at com.android.okhttp.Connection.connectSocket(Connection.java:199) 
at com.android.okhttp.Connection.connect(Connection.java:172) 
at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:367) 
at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:130) 
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:329) 
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:246) 
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:457) 
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:405) 
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:243) 
at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210) 
at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java) 
at api.mynewleafapi.webapi.MNLStatics$override.getBackgroundForTree(MNLStatics.java:229) 
at api.mynewleafapi.webapi.MNLStatics$override.access$dispatch(MNLStatics.java) 
at api.mynewleafapi.webapi.MNLStatics.getBackgroundForTree(MNLStatics.java:0) 
at com.android.mynewleaf.recov.ui.fragment.usermain.UserMainProfileViewFragment$2.run(UserMainProfileViewFragment.java:146) 
Suppressed: javax.net.ssl.SSLHandshakeException: Handshake failed 
    ... 17 more 
Caused by: javax.net.ssl.SSLProtocolException: SSL handshake terminated: ssl=0x786ae841c0: Failure in SSL library, usually a protocol error 
error:10000410:SSL routines:OPENSSL_internal:SSLV3_ALERT_HANDSHAKE_FAILURE (external/boringssl/src/ssl/s3_pkt.c:610 0x786ae12de0:0x00000001) 
error:1000009a:SSL routines:OPENSSL_internal:HANDSHAKE_FAILURE_ON_CLIENT_HELLO (external/boringssl/src/ssl/s3_clnt.c:764 0x786880dfce:0x00000000) 
    at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method) 
    at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:357) 
     ... 16 more 
Caused by: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x786ae841c0: Failure in SSL library, usually a protocol error 
error:100000af:SSL routines:OPENSSL_internal:NO_CIPHERS_AVAILABLE (external/boringssl/src/ssl/s3_clnt.c:624 0x786880dfce:0x00000000) 
    at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method) 
    at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:357) 
    ... 16 more 

ハンドシェイクが失敗していることを肯定している:HttpURLConnectiongetInputStream()メソッドを呼び出すときに、私のネクサス5倍、LogCatに

は、次のスタックトレースを生成します。私が接続しているpatricularサーバがTLS_ECDHE_ECDSA_WITH_AES_128_GCMを使用していることはわかっています。これはString[] array = factory.getDefaultCipherSuites();の質問から得られるサポートされている暗号スイートのリストにあります。私はAndroid 7を実行しているデバイスでこの問題を再現できましたが、問題はAndroid 6以降には表示されません。どのようにこれを修正することができますか?

+0

問題のURLを提供してサーバーの機能をチェックできるようにすると、より効果的です。 –

答えて

0

あなたは理解するには次のリンクを参照してくださいすることができます

RC4暗号:https://developer.android.com/about/versions/nougat/android-7.0-changes.html#other

アンドロイド7.0は、HTTPS用のアプリケーションで使用されるデフォルトのTLS/SSLの設定や他のTLS/SSLトラフィックを次のように変更しますスイートは現在無効になっています。 CHACHA20-POLY1305暗号スイートが有効になりました。 RC4がデフォルトで無効になっていると、サーバーが最新の暗号スイートをネゴシエートしないと、HTTPSまたはTLS/SSL接続で破損する可能性があります。推奨される修正は、より強力で最新の暗号スイートとプロトコルを有効にするためにサーバーの構成を改善することです。理想的には、TLSv1.2とAES-GCMを有効にし、ECDHE(Forward Secrecy Cipher Suite)を有効にして優先する必要があります。

代わりに、カスタムSSLSocketFactoryを使用してサーバーと通信するようにアプリケーションを変更することもできます。このファクトリは、デフォルトの暗号スイートに加えて、サーバーで必要な暗号スイートの一部を持つSSLSocketインスタンスを作成するように設計する必要があります。

関連する問題