04-23 17:17:38.434 21599-21956/ D/NativeCrypto: ssl=0x0 NativeCrypto_SSL_interrupt
04-23 17:17:38.435 21599-21956/ D/OkHttp: <-- HTTP FAILED: javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x635d8808: Failure in SSL library, usually a protocol error
error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure (external/openssl/ssl/s23_clnt.c:744 0x5e6c46fd:0x00000000)
Les appareils Android de version inférieure (4.1 - 4.4) donnent une erreur SSL. Auparavant, fonctionnait bien avec les versions suivantes:
implementation 'com.squareup.okhttp3:okhttp:3.9.1'
implementation 'com.squareup.okhttp3:okhttp-urlconnection:3.9.1'
implementation 'com.squareup.okhttp3:logging-interceptor:3.9.1'
implementation 'com.squareup.retrofit2:retrofit:2.3.0'
implementation 'com.squareup.retrofit2:converter-jackson:2.3.0'
implementation 'com.squareup.retrofit2:adapter-rxjava:2.3.0'
Mais après la mise à niveau de ces bibliothèques, les choses changent. Chaque appel de service donne une exception de prise de contact SSL.
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
implementation 'com.squareup.okhttp3:okhttp-urlconnection:3.10.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-jackson:2.4.0'
implementation 'com.squareup.retrofit2:adapter-rxjava:2.4.0'
De plus, si je rétrograde ces bibliothèques vers la version précédente, cela ne fonctionne toujours pas. Mais git checkout pour le commit précédent fonctionne très bien. Aucune idée.
J'ai rencontré ce problème lors de la mise à niveau vers OkHttp 4.x. Plutôt que d'avoir à garder une trace de toutes les versions TLS connues et de tous les chiffrements connus comme Anker recommande , utilisez les méthodes allEnabledTlsVersions et allEnabledCipherSuites d'OkHttp:
val builder = OkHttpClient.Builder()
…
// The default OkHttp configuration does not support older versions of TLS,
// or all cipher suites. Make our support as reasonably broad as possible.
builder.connectionSpecs(listOf(ConnectionSpec.CLEARTEXT,
ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
.allEnabledTlsVersions()
.allEnabledCipherSuites()
.build()))
…
val okHttpClient = builder.build()
Ces listes resteront à jour tant que vous mettrez à jour OkHttp régulièrement. Depuis le doc API ConnectionSpec :
Utilisez Builder.allEnabledTlsVersions et Builder.allEnabledCipherSuites pour reporter toute la sélection de fonctionnalités au socket SSL sous-jacent.
La configuration de chaque spécification change avec chaque version d'OkHttp. C'est ennuyeux: la mise à niveau de votre bibliothèque OkHttp peut interrompre la connectivité à certains serveurs Web! Mais c'est une gêne nécessaire car l'écosystème TLS est dynamique et il est nécessaire de rester à jour pour rester en sécurité. Consultez l'historique de configuration TLS d'OkHttp pour suivre ces modifications.