Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React native OkEpiner似乎不起作用_React Native_Ssl_Okhttp_Certificate Pinning_Public Key Pinning - Fatal编程技术网

React native OkEpiner似乎不起作用

React native OkEpiner似乎不起作用,react-native,ssl,okhttp,certificate-pinning,public-key-pinning,React Native,Ssl,Okhttp,Certificate Pinning,Public Key Pinning,我需要一些帮助 我试图在我的react本机应用程序(v0.63)上实现SSLPining im已经按照OkHttp github页面上的文档进行了操作 以下是我为我的应用程序编写的代码: public class CustomClientFactory implements OkHttpClientFactory { @Override public OkHttpClient createNewNetworkModuleClient() { CertificatePinner ce

我需要一些帮助

我试图在我的react本机应用程序(v0.63)上实现SSLPining

im已经按照OkHttp github页面上的文档进行了操作

以下是我为我的应用程序编写的代码:

public class CustomClientFactory implements OkHttpClientFactory {

@Override
  public OkHttpClient createNewNetworkModuleClient() {
    CertificatePinner certificatePinner = new CertificatePinner.Builder()
      .add(BuildConfig.HOSTNAME, BuildConfig.SHA_PUBLIC_KEY_1)
      .add(BuildConfig.HOSTNAME, BuildConfig.SHA_PUBLIC_KEY_2)
      .add(BuildConfig.HOSTNAME, BuildConfig.SHA_PUBLIC_KEY_3)
      .build();

    OkHttpClient.Builder client = new OkHttpClient.Builder()
      .connectTimeout(0, TimeUnit.MILLISECONDS)
      .readTimeout(0, TimeUnit.MILLISECONDS)
      .writeTimeout(0, TimeUnit.MILLISECONDS)
      .cookieJar(new ReactCookieJarContainer())
      .certificatePinner(certificatePinner);

    OkHttpClient newClient = OkHttpClientProvider.enableTls12OnPreLollipop(client).build();

    return newClient;
  }
}
OkHttpCertPin:

public class OkHttpCertPin {
    public static void rebuildOkHttpForSslPinning() {
        OkHttpClientProvider.setOkHttpClientFactory(new CustomClientFactory());
    }
}
这是我在MainActivity上的onCreate方法:

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    OkHttpCertPin.rebuildOkHttpForSslPinning();
  }
它允许所有请求都通过,即使我使用随机公钥和主机名

我做错了什么


我从sslLabs获得的所有公钥都将仅限制主机BuildConfig.HOSTNAME的通信量,所有其他主机都将通过。这就是为什么你的证书管理员没有阻止任何东西

您可以创建自定义网络拦截器以拒绝所有其他流量。看

n、 b.将来,您可以实现一个EventListener,并打印出您要连接的主机和证书链中的pin,以帮助调试


请参见

切题:是否确实需要启用TLS12onprellollipop,OkHttp应协商TLSv1.2,当它在Android上可用时。CertificateInner将仅限制主机BuildConfig.HOSTNAME的流量,所有其他主机都将通过。您希望发生什么情况,以及连接到哪些主机?你可以实现一个EventListener并打印出你要连接的主机和证书链中的pin来帮助调试。哦,那么我认为是什么错了?我想要的是除了BuildConfig.hostname之外的所有主机名都将受到限制,现在我使用okhttp提供的拦截器方法来打印每个调用的请求和响应,我想我可以使用拦截器打印主机,使用网络拦截器并短路这些请求。证书Pinner不是这个。是的,我想我对这个证书Pinner的想法是错误的,但是在阅读了你在我文章中的评论之后,我已经重构了我的代码