OkHttp certificatePinner似乎不工作



我需要帮助,

我正在尝试在我的react-native应用程序(v0.63)上实现sslpin。

我已经遵循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

CertificatePinner将只限制主机BuildConfig的流量。主机名,所有其他主机都可以通过。这就是为什么你的CertificatePinner没有阻止任何东西。

您可以创建一个自定义网络拦截器来拒绝所有其他流量。见https://square.github.io/okhttp/interceptors/

的被害者。以后你可以实现一个EventListener并打印出你正在连接的主机和证书链的引脚来帮助调试。

见https://stackoverflow.com/a/66398516/1542667

相关内容

  • 没有找到相关文章

最新更新