Skip to content

Commit 2fd5424

Browse files
Ron RadtkeRon Radtke
authored andcommitted
For trusty option an own trustmanager has to be provided from now on
Merge remote-tracking branch 'origin/develop'
2 parents a24712a + 66fd211 commit 2fd5424

File tree

2 files changed

+29
-17
lines changed

2 files changed

+29
-17
lines changed

README.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -908,6 +908,30 @@ ReactNativeBlobUtil.fetch('POST', 'http://example.com/upload', {'Transfer-Encodi
908908
### Self-Signed SSL Server
909909

910910
By default, react-native-blob-util does NOT allow connection to unknown certification provider since it's dangerous. To connect a server with self-signed certification, you need to add `trusty` to `config` explicitly. This function is available for version >= `0.5.3`
911+
In addition since ``0.16.0`` you'll have to define your own trust manager for android.
912+
````java
913+
public class MainApplication extends Application implements ReactApplication {
914+
...
915+
@Override
916+
public void onCreate() {
917+
...
918+
ReactNativeBlobUtilUtils.sharedTrustManager = final X509TrustManager x509TrustManager = new X509TrustManager() {
919+
@Override
920+
public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
921+
}
922+
923+
@Override
924+
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
925+
}
926+
927+
@Override
928+
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
929+
return new java.security.cert.X509Certificate[]{};
930+
}
931+
};
932+
...
933+
}
934+
````
911935

912936
```js
913937
ReactNativeBlobUtil.config({

android/src/main/java/com/ReactNativeBlobUtil/ReactNativeBlobUtilUtils.java

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010

1111
import java.nio.charset.Charset;
1212
import java.security.MessageDigest;
13-
import java.security.cert.CertificateException;
1413
import java.util.Locale;
1514

1615
import javax.net.ssl.HostnameVerifier;
@@ -22,9 +21,10 @@
2221

2322
import okhttp3.OkHttpClient;
2423

25-
2624
public class ReactNativeBlobUtilUtils {
2725

26+
public static X509TrustManager sharedTrustManager;
27+
2828
public static String getMD5(String input) {
2929
String result = null;
3030

@@ -61,22 +61,10 @@ public static void emitWarningEvent(String data) {
6161

6262
public static OkHttpClient.Builder getUnsafeOkHttpClient(OkHttpClient client) {
6363
try {
64-
// Create a trust manager that does not validate certificate chains
65-
final X509TrustManager x509TrustManager = new X509TrustManager() {
66-
@Override
67-
public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
68-
}
6964

70-
@Override
71-
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
72-
}
65+
if (sharedTrustManager == null) throw new IllegalStateException("Use of own trust manager but none defined");
7366

74-
@Override
75-
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
76-
return new java.security.cert.X509Certificate[]{};
77-
}
78-
};
79-
final TrustManager[] trustAllCerts = new TrustManager[]{x509TrustManager};
67+
final TrustManager[] trustAllCerts = new TrustManager[]{sharedTrustManager};
8068

8169
// Install the all-trusting trust manager
8270
final SSLContext sslContext = SSLContext.getInstance("SSL");
@@ -85,7 +73,7 @@ public java.security.cert.X509Certificate[] getAcceptedIssuers() {
8573
final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
8674

8775
OkHttpClient.Builder builder = client.newBuilder();
88-
builder.sslSocketFactory(sslSocketFactory, x509TrustManager);
76+
builder.sslSocketFactory(sslSocketFactory, sharedTrustManager);
8977
builder.hostnameVerifier(new HostnameVerifier() {
9078
@Override
9179
public boolean verify(String hostname, SSLSession session) {

0 commit comments

Comments
 (0)