Skip to content

Commit 66fd211

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/feature/trustmanager_removal' into develop
2 parents 7b5fb99 + bc6a404 commit 66fd211

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
@@ -878,6 +878,30 @@ ReactNativeBlobUtil.fetch('POST', 'http://example.com/upload', {'Transfer-Encodi
878878
### Self-Signed SSL Server
879879

880880
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`
881+
In addition since ``0.16.0`` you'll have to define your own trust manager for android.
882+
````java
883+
public class MainApplication extends Application implements ReactApplication {
884+
...
885+
@Override
886+
public void onCreate() {
887+
...
888+
ReactNativeBlobUtilUtils.sharedTrustManager = final X509TrustManager x509TrustManager = new X509TrustManager() {
889+
@Override
890+
public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
891+
}
892+
893+
@Override
894+
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
895+
}
896+
897+
@Override
898+
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
899+
return new java.security.cert.X509Certificate[]{};
900+
}
901+
};
902+
...
903+
}
904+
````
881905

882906
```js
883907
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)