当前位置: 首页 > 知识库问答 >
问题:

忽略Android React Native上的SSL证书检查

卢书
2023-03-14

我目前在Android上工作。我正在使用fetch()发出api请求,但请求导致网络请求失败,这是由于endpoint没有ssl证书。通过修改一些xcode文件,我可以在iOS上删除此检查。有没有办法忽略Android上的ssl证书检查?

共有3个答案

仇高韵
2023-03-14

注意:这是脏的解决方案

您可以修补webview包

node_modules/android/src/main/java/com/reactnativecCommunity ity/webview/RNCWebViewManager.java

在onReceivedSslError中将handler.cancel()更改为handler.proceed();像这样

@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
   // before: handler.cancel();
  handler.proceed();
}

如果你想做补丁包,那么你可以使用这个补丁包库

秦安怡
2023-03-14

我也面临同样的问题。我已经用过了。并将下面的代码粘贴到索引中。js。

import {AppRegistry} from 'react-native';
import App from './App';
import {name as appName} from './app.json';
import RNFetchBlob from 'rn-fetch-blob';

AppRegistry.registerComponent(appName, () => App);
const Fetch = RNFetchBlob.polyfill.Fetch
// replace built-in fetch
window.fetch = new Fetch({
     // enable this option so that the response data conversion handled automatically
     auto : true,
    // when receiving response data, the module will match its Content-Type header
   // with strings in this array. If it contains any one of string in this array, 
  // the response body will be considered as binary data and the data will be stored
  // in file system instead of in memory.
  // By default, it only store response data to file system when Content-Type 
  // contains string `application/octet`.
  binaryContentTypes : [
    'image/',
    'video/',
    'audio/',
    'foo/',
 ],
 trusty : true
}).build()

如果您仍然面临Android中SSL握手的问题,请尝试使用以下解决方案。并从MainApplication中的onCreate()调用以下函数。爪哇:-

 import android.annotation.SuppressLint;
 import java.security.SecureRandom;
 import java.security.cert.X509Certificate;

 import javax.net.ssl.HostnameVerifier;
 import javax.net.ssl.HttpsURLConnection;
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.SSLSession;
 import javax.net.ssl.TrustManager;
 import javax.net.ssl.X509TrustManager;

 public class MainApplication extends Application implements ReactApplication {
    @Override
    public void onCreate() {
         super.onCreate();
         handleSSLHandshake();
         SoLoader.init(this, /* native exopackage */ false);
         initializeFlipper(this); // Remove this line if you don't want Flipper enabled
    }

    /**
    * Enables https connections
    */
   @SuppressLint("TrulyRandom")
    public static void handleSSLHandshake() {
        try {
            TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
               public X509Certificate[] getAcceptedIssuers() {
                  return new X509Certificate[0];
               }

              @Override
              public void checkClientTrusted(X509Certificate[] certs, String authType) {
              }

               @Override
               public void checkServerTrusted(X509Certificate[] certs, String authType) {
               }
           }};

           SSLContext sc = SSLContext.getInstance("SSL");
           sc.init(null, trustAllCerts, new SecureRandom());


     HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
          HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
               @Override
               public boolean verify(String arg0, SSLSession arg1) {
                  return true;
              }
           });
      } catch (Exception ignored) {
      }
    } 
 }
戈正初
2023-03-14
/**
 * Disables the SSL certificate checking for new instances of {@link HttpsURLConnection} This has been created to
 * aid testing on a local box, not for use on production.
 */
private static void disableSSLCertificateChecking() {
    TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }

        @Override
        public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
            // Not implemented
        }

        @Override
        public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
            // Not implemented
        }
    } };

    try {
        SSLContext sc = SSLContext.getInstance("TLS");

        sc.init(null, trustAllCerts, new java.security.SecureRandom());

        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    } catch (KeyManagementException e) {
        e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
}

在这里找到这个:https://gist.github.com/aembleton/889392.不太确定它是否有效,但这是一个开始!

 类似资料:
  • 问题内容: URL myUrl = new URL(“https://www....."); 网站的SSL证书已过期。如何避免它并使URL()工作? 问题答案: 您应该构建一个包装默认信任管理器的,捕获并忽略它。 注意:如此答案中所述,此设置是否安全在很大程度上取决于实现。特别是,它依赖于在正确检查所有其他内容之后最后执行的日期验证。 遵循这些原则的东西应该起作用: 当证书有问题时,信任管理器将抛

  • 问题内容: Apache Http客户端。您可以在此处查看相关代码: 这是每个人都用来忽略SSL证书错误的方法(仅将其设置为登台,它将不会在生产中使用)。但是,我仍然收到以下异常/堆栈跟踪: 任何提示都很好。如果我做的TrustManager错误,或者我应该以不同的方式执行HTTP Post方法,则可以选择两种方式。 谢谢! 问题答案: 首先,不要 忽略 证书错误。与他们打交道。忽略证书错误将打开

  • 我正在开发一个应用程序,使用rest API将其连接到数据库,我的服务器有一个SSL证书,当我试图发送请求时,从我的反应本地应用程序显示此错误msg是有办法禁用SSL验证反应原生Android。 如果有人知道,帮忙。

  • 问题内容: 如何忽略Apache HttpClient 4.3的SSL证书(全部信任)? 我在SO上找到的所有答案都对待以前的版本,并且API更改了。 编辑: 仅用于测试目的。孩子们,不要在家(或生产中)尝试 问题答案: 以下代码可用于信任自签名证书。创建客户端时,必须使用TrustSelfSignedStrategy: 我没有故意包括:重点是允许使用自签名证书进行测试,因此您不必从证书颁发机构获

  • 如何忽略Apache HttpClient4.3的SSL证书(信任所有证书)? null 仅用于测试目的。孩子们,不要在家里(或生产中)尝试