|
25 | 25 | import android.content.ServiceConnection;
|
26 | 26 | import android.content.pm.PackageInfo;
|
27 | 27 | import android.content.pm.PackageManager;
|
| 28 | +import android.net.SSLCertificateSocketFactory; |
28 | 29 | import android.os.AsyncTask;
|
| 30 | +import android.os.Build; |
29 | 31 | import android.os.Debug;
|
30 | 32 | import android.util.Log;
|
31 | 33 | import androidx.annotation.NonNull;
|
|
48 | 50 | import com.hippo.image.Image;
|
49 | 51 | import com.hippo.image.ImageBitmap;
|
50 | 52 | import com.hippo.network.StatusCodeException;
|
| 53 | +import com.hippo.network.Tls12SocketFactory; |
51 | 54 | import com.hippo.text.Html;
|
52 | 55 | import com.hippo.unifile.UniFile;
|
53 | 56 | import com.hippo.util.BitmapUtils;
|
|
65 | 68 | import java.util.List;
|
66 | 69 | import java.util.concurrent.TimeUnit;
|
67 | 70 |
|
| 71 | +import javax.net.ssl.SSLContext; |
| 72 | + |
68 | 73 | import okhttp3.Cache;
|
| 74 | +import okhttp3.ConnectionSpec; |
69 | 75 | import okhttp3.OkHttpClient;
|
| 76 | +import okhttp3.TlsVersion; |
70 | 77 |
|
71 | 78 | public class EhApplication extends RecordingApplication {
|
72 | 79 |
|
@@ -303,14 +310,17 @@ public static EhProxySelector getEhProxySelector(@NonNull Context context) {
|
303 | 310 | public static OkHttpClient getOkHttpClient(@NonNull Context context) {
|
304 | 311 | EhApplication application = ((EhApplication) context.getApplicationContext());
|
305 | 312 | if (application.mOkHttpClient == null) {
|
306 |
| - application.mOkHttpClient = new OkHttpClient.Builder() |
| 313 | + application.mOkHttpClient = enableTls120nPreLollipop(new OkHttpClient.Builder() |
| 314 | + .followRedirects(true) |
| 315 | + .followSslRedirects(true) |
| 316 | + .retryOnConnectionFailure(true) |
307 | 317 | .connectTimeout(10, TimeUnit.SECONDS)
|
308 | 318 | .readTimeout(10, TimeUnit.SECONDS)
|
309 | 319 | .writeTimeout(10, TimeUnit.SECONDS)
|
310 | 320 | .cookieJar(getEhCookieStore(application))
|
311 | 321 | .dns(new EhDns(application))
|
312 | 322 | .proxySelector(getEhProxySelector(application))
|
313 |
| - .build(); |
| 323 | + ).build(); |
314 | 324 | }
|
315 | 325 | return application.mOkHttpClient;
|
316 | 326 | }
|
@@ -471,4 +481,30 @@ public void unbindService(ServiceConnection conn) {
|
471 | 481 | ExceptionUtils.throwIfFatal(t);
|
472 | 482 | }
|
473 | 483 | }
|
| 484 | + |
| 485 | + public static OkHttpClient.Builder enableTls120nPreLollipop(OkHttpClient.Builder client){ |
| 486 | + // |
| 487 | + if (Build.VERSION.SDK_INT >= 16 && Build.VERSION.SDK_INT <= 22){ |
| 488 | + try{ |
| 489 | + SSLContext sslContext = SSLContext.getInstance("TLSv1.2"); |
| 490 | + sslContext.init(null,null,null); |
| 491 | + client.sslSocketFactory(new Tls12SocketFactory(sslContext.getSocketFactory())); |
| 492 | + |
| 493 | + ConnectionSpec cs = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS) |
| 494 | + .tlsVersions(TlsVersion.TLS_1_2) |
| 495 | + .build(); |
| 496 | + |
| 497 | + List<ConnectionSpec> specs = new ArrayList<>(); |
| 498 | + specs.add(cs); |
| 499 | + specs.add(ConnectionSpec.COMPATIBLE_TLS); |
| 500 | + specs.add(ConnectionSpec.CLEARTEXT); |
| 501 | + |
| 502 | + client.connectionSpecs(specs); |
| 503 | + }catch (Exception exc){ |
| 504 | + Log.e("OkHttpTLSCompat","Error while setting TLS 1.2", exc); |
| 505 | + } |
| 506 | + } |
| 507 | + |
| 508 | + return client; |
| 509 | + } |
474 | 510 | }
|
0 commit comments