1
+ package com .RNFetchBlob .Utils ;
2
+
3
+ import java .io .IOException ;
4
+ import java .net .InetAddress ;
5
+ import java .net .Socket ;
6
+ import java .net .UnknownHostException ;
7
+
8
+ import javax .net .ssl .SSLSocket ;
9
+ import javax .net .ssl .SSLSocketFactory ;
10
+
11
+ /**
12
+ * Enables TLS v1.2 when creating SSLSockets.
13
+ * <p/>
14
+ * For some reason, android supports TLS v1.2 from API 16, but enables it by
15
+ * default only from API 20.
16
+ * @link https://developer.android.com/reference/javax/net/ssl/SSLSocket.html
17
+ * @see SSLSocketFactory
18
+ */
19
+ public class Tls12SocketFactory extends SSLSocketFactory {
20
+ private static final String [] TLS_V12_ONLY = {"TLSv1.2" };
21
+
22
+ final SSLSocketFactory delegate ;
23
+
24
+ public Tls12SocketFactory (SSLSocketFactory base ) {
25
+ this .delegate = base ;
26
+ }
27
+
28
+ @ Override
29
+ public String [] getDefaultCipherSuites () {
30
+ return delegate .getDefaultCipherSuites ();
31
+ }
32
+
33
+ @ Override
34
+ public String [] getSupportedCipherSuites () {
35
+ return delegate .getSupportedCipherSuites ();
36
+ }
37
+
38
+ @ Override
39
+ public Socket createSocket (Socket s , String host , int port , boolean autoClose ) throws IOException {
40
+ return patch (delegate .createSocket (s , host , port , autoClose ));
41
+ }
42
+
43
+ @ Override
44
+ public Socket createSocket (String host , int port ) throws IOException , UnknownHostException {
45
+ return patch (delegate .createSocket (host , port ));
46
+ }
47
+
48
+ @ Override
49
+ public Socket createSocket (String host , int port , InetAddress localHost , int localPort ) throws IOException , UnknownHostException {
50
+ return patch (delegate .createSocket (host , port , localHost , localPort ));
51
+ }
52
+
53
+ @ Override
54
+ public Socket createSocket (InetAddress host , int port ) throws IOException {
55
+ return patch (delegate .createSocket (host , port ));
56
+ }
57
+
58
+ @ Override
59
+ public Socket createSocket (InetAddress address , int port , InetAddress localAddress , int localPort ) throws IOException {
60
+ return patch (delegate .createSocket (address , port , localAddress , localPort ));
61
+ }
62
+
63
+ private Socket patch (Socket s ) {
64
+ if (s instanceof SSLSocket ) {
65
+ ((SSLSocket ) s ).setEnabledProtocols (TLS_V12_ONLY );
66
+ }
67
+ return s ;
68
+ }
69
+ }
0 commit comments