TLS Configuration History ========================= OkHttp tracks the dynamic TLS ecosystem to balance connectivity and security. This page is a log of changes we've made over time to OkHttp's default TLS options. [OkHttp 3.14][OkHttp314] ------------------------ _2019-03-14_ Remove 2 TLSv1.3 cipher suites that are neither available on OkHttp’s host platforms nor enabled in releases of Chrome and Firefox. ##### RESTRICTED_TLS cipher suites * TLS_AES_128_GCM_SHA256[¹][tlsv13_only] * TLS_AES_256_GCM_SHA384[¹][tlsv13_only] * TLS_CHACHA20_POLY1305_SHA256[¹][tlsv13_only] * TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 * TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 * TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 * TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 * TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 * TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 * **REMOVED:** ~~TLS_AES_128_CCM_SHA256[¹][tlsv13_only]~~ * **REMOVED:** ~~TLS_AES_128_CCM_8_SHA256[¹][tlsv13_only]~~ ##### MODERN_TLS / COMPATIBLE_TLS cipher suites * TLS_AES_128_GCM_SHA256[¹][tlsv13_only] * TLS_AES_256_GCM_SHA384[¹][tlsv13_only] * TLS_CHACHA20_POLY1305_SHA256[¹][tlsv13_only] * TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 * TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 * TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 * TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 * TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 * TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 * TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA[²][http2_naughty] * TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA[²][http2_naughty] * TLS_RSA_WITH_AES_128_GCM_SHA256[²][http2_naughty] * TLS_RSA_WITH_AES_256_GCM_SHA384[²][http2_naughty] * TLS_RSA_WITH_AES_128_CBC_SHA[²][http2_naughty] * TLS_RSA_WITH_AES_256_CBC_SHA[²][http2_naughty] * TLS_RSA_WITH_3DES_EDE_CBC_SHA[²][http2_naughty] * **REMOVED:** ~~TLS_AES_128_CCM_SHA256[¹][tlsv13_only]~~ * **REMOVED:** ~~TLS_AES_128_CCM_8_SHA256[¹][tlsv13_only]~~ [OkHttp 3.13][OkHttp313] ------------------------ _2019-02-04_ Remove TLSv1.1 and TLSv1 from MODERN_TLS. Change COMPATIBLE_TLS to support all TLS versions. ##### RESTRICTED_TLS versions * TLSv1.3 * TLSv1.2 ##### MODERN_TLS versions * TLSv1.3 * TLSv1.2 * **REMOVED:** ~~TLSv1.1~~ * **REMOVED:** ~~TLSv1~~ ##### COMPATIBLE_TLS versions * **NEW:** TLSv1.3 * **NEW:** TLSv1.2 * **NEW:** TLSv1.1 * TLSv1 [OkHttp 3.12][OkHttp312] ------------------------ _2018-11-16_ Added support for TLSv1.3. ##### RESTRICTED_TLS cipher suites * **NEW:** TLS_AES_128_GCM_SHA256[¹][tlsv13_only] * **NEW:** TLS_AES_256_GCM_SHA384[¹][tlsv13_only] * **NEW:** TLS_CHACHA20_POLY1305_SHA256[¹][tlsv13_only] * **NEW:** TLS_AES_128_CCM_SHA256[¹][tlsv13_only] * **NEW:** TLS_AES_128_CCM_8_SHA256[¹][tlsv13_only] * TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 * TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 * TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 * TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 * TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 * TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 ##### MODERN_TLS / COMPATIBLE_TLS cipher suites * **NEW:** TLS_AES_128_GCM_SHA256[¹][tlsv13_only] * **NEW:** TLS_AES_256_GCM_SHA384[¹][tlsv13_only] * **NEW:** TLS_CHACHA20_POLY1305_SHA256[¹][tlsv13_only] * **NEW:** TLS_AES_128_CCM_SHA256[¹][tlsv13_only] * **NEW:** TLS_AES_128_CCM_8_SHA256[¹][tlsv13_only] * TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 * TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 * TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 * TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 * TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 * TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 * TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA[²][http2_naughty] * TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA[²][http2_naughty] * TLS_RSA_WITH_AES_128_GCM_SHA256[²][http2_naughty] * TLS_RSA_WITH_AES_256_GCM_SHA384[²][http2_naughty] * TLS_RSA_WITH_AES_128_CBC_SHA[²][http2_naughty] * TLS_RSA_WITH_AES_256_CBC_SHA[²][http2_naughty] * TLS_RSA_WITH_3DES_EDE_CBC_SHA[²][http2_naughty] ##### RESTRICTED_TLS versions * **NEW:** TLSv1.3 * TLSv1.2 ##### MODERN_TLS versions * **NEW:** TLSv1.3 * TLSv1.2 * TLSv1.1 * TLSv1 ##### COMPATIBLE_TLS versions * TLSv1 [OkHttp 3.11][OkHttp311] ------------------------ _2018-07-12_ Added a new extra strict RESTRICTED_TLS configuration inspired by [Google Cloud’s similar policy][googlecloud_ssl_policy]. It is appropriate when both the host platform (JVM/Conscrypt/Android) and target webserver are current. ##### RESTRICTED_TLS cipher suites * TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 * TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 * TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 * TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 * TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 * TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 ##### RESTRICTED_TLS versions * TLSv1.2 [OkHttp 3.10][OkHttp310] ------------------------ _2018-02-24_ Remove two rarely-used cipher suites from the default set. This tracks a [Chromium change][chromium_change] to remove these cipher suites because they are fragile and rarely-used. ##### MODERN_TLS / COMPATIBLE_TLS cipher suites * TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 * TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 * TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 * TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 * TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 * TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 * TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA[²][http2_naughty] * TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA[²][http2_naughty] * TLS_RSA_WITH_AES_128_GCM_SHA256[²][http2_naughty] * TLS_RSA_WITH_AES_256_GCM_SHA384[²][http2_naughty] * TLS_RSA_WITH_AES_128_CBC_SHA[²][http2_naughty] * TLS_RSA_WITH_AES_256_CBC_SHA[²][http2_naughty] * TLS_RSA_WITH_3DES_EDE_CBC_SHA[²][http2_naughty] * **REMOVED:** ~~TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA~~ * **REMOVED:** ~~TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA~~ [OkHttp 3.5][OkHttp35] ---------------------- _2016-11-30_ Remove three old cipher suites and add five new ones. This tracks changes in what's available on Android and Java, and also what cipher suites recent releases of Chrome and Firefox support by default. ##### MODERN_TLS / COMPATIBLE_TLS cipher suites * TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 * TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 * **NEW:** TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 * **NEW:** TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 * **NEW:** TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 * **NEW:** TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 * TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA[²][http2_naughty] * TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA[²][http2_naughty] * TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA[²][http2_naughty] * TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA[²][http2_naughty] * TLS_RSA_WITH_AES_128_GCM_SHA256[²][http2_naughty] * **NEW:** TLS_RSA_WITH_AES_256_GCM_SHA384[²][http2_naughty] * TLS_RSA_WITH_AES_128_CBC_SHA[²][http2_naughty] * TLS_RSA_WITH_AES_256_CBC_SHA[²][http2_naughty] * TLS_RSA_WITH_3DES_EDE_CBC_SHA[²][http2_naughty] * **REMOVED:** ~~TLS_DHE_RSA_WITH_AES_128_CBC_SHA~~ * **REMOVED:** ~~TLS_DHE_RSA_WITH_AES_128_GCM_SHA256~~ * **REMOVED:** ~~TLS_DHE_RSA_WITH_AES_256_CBC_SHA~~ [OkHttp 3.0][OkHttp30] ---------------------- _2016-01-13_ ##### MODERN_TLS / COMPATIBLE_TLS cipher suites * TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 * TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 * TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 * TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA[²][http2_naughty] * TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA[²][http2_naughty] * TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA[²][http2_naughty] * TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA[²][http2_naughty] * TLS_DHE_RSA_WITH_AES_128_CBC_SHA[²][http2_naughty] * TLS_DHE_RSA_WITH_AES_256_CBC_SHA[²][http2_naughty] * TLS_RSA_WITH_AES_128_GCM_SHA256[²][http2_naughty] * TLS_RSA_WITH_AES_128_CBC_SHA[²][http2_naughty] * TLS_RSA_WITH_AES_256_CBC_SHA[²][http2_naughty] * TLS_RSA_WITH_3DES_EDE_CBC_SHA[²][http2_naughty] ##### MODERN_TLS versions * TLSv1.2 * TLSv1.1 * TLSv1 ##### COMPATIBLE_TLS versions * TLSv1 --- #### ¹ TLSv1.3 Only Cipher suites that are only available with TLSv1.3. #### ² HTTP/2 Cipher Suite Denylist Cipher suites that are [discouraged for use][http2_denylist] with HTTP/2. OkHttp includes them because better suites are not commonly available. For example, none of the better cipher suites listed above shipped with Android 4.4 or Java 7. [OkHttp30]: https://square.github.io/okhttp/changelog_3x/#version-300 [OkHttp310]: https://square.github.io/okhttp/changelog_3x/#version-310 [OkHttp311]: https://square.github.io/okhttp/changelog_3x/#version-320 [OkHttp312]: https://square.github.io/okhttp/changelog_3x/#version-330 [OkHttp313]: https://square.github.io/okhttp/changelog_3x/#version-340 [OkHttp314]: https://square.github.io/okhttp/changelog_3x/#version-310 [OkHttp35]: https://square.github.io/okhttp/changelog_3x/#version-350 [chromium_change]: https://developers.google.com/web/updates/2016/12/chrome-56-deprecations#remove_cbc-mode_ecdsa_ciphers_in_tls [googlecloud_ssl_policy]: https://cloud.google.com/load-balancing/docs/ssl-policies-concepts [http2_denylist]: https://tools.ietf.org/html/rfc7540#appendix-A [http2_naughty]: #http2_naughty [tlsv13_only]: #tlsv13_only