为了安全起见,我正在使用 okhttp3 证书固定。但是 VAPT 团队能够绕过固定并能够拦截通信。他们正在使用 android ssl trust killer apk。
构建 pinner 对象的代码:
public CertificatePinner provideCertificatePinner() {
final CertificatePinner.Builder builder = new CertificatePinner.Builder();
builder.add(DOMAIN_PATTERN, "sha1/***********");
builder.add(DOMAIN_PATTERN, "sha256/**********");
builder.add(DOMAIN_PATTERN, "sha256/*******");
builder.add(DOMAIN_PATTERN, "sha256/*****
return builder.build();
}
将 pinner 附加到 HTTP 客户端:
OkHttpClient getOkHttpClient(HttpLoggingInterceptor interceptor, CommonRequestInterceptor authenticationInterceptor
, CertificatePinner certificatePinner) {
OkHttpClient okHttpClient = null;
try {
OkHttpClient.Builder okHttpClientBuilder = new OkHttpClient.Builder().readTimeout
(Constants.NetworkConstants.READ_TIMEOUT, TimeUnit.SECONDS).connectTimeout
(Constants.NetworkConstants.CONNECTION_TIMEOUT, TimeUnit.SECONDS);
okHttpClientBuilder.sslSocketFactory((SSLSocketFactory) SSLSocketFactory.getDefault());
okHttpClientBuilder.addInterceptor(authenticationInterceptor);
okHttpClientBuilder.addInterceptor(interceptor);
okHttpClientBuilder.certificatePinner(certificatePinner);
okHttpClient = enableTls12OnPreLollipop(okHttpClientBuilder).build();
} catch (Exception e) {
e.printStackTrace();
}
return okHttpClient;
}
最佳答案
可以看到this blog series关于一个虚构的应用程序,了解您可以采取的所有安全步骤来保护您的应用程序,如何绕过它们,最后您将能够看到后端如何防御与受感染应用程序的通信。
所以简而言之,证书固定的绕过是无法避免的,但是你的应用程序的后端可以防御它。
尽管可以绕过证书固定,但仍然建议将其用作多一层防御。
防止应用程序和/或设备受到损害的另一件重要事情是让您的应用程序仅与您直接控制的后端通信,尽可能避免直接调用第三方服务提供商。
(免责声明:我在 Approov 工作,该解决方案可防止应用程序遭到入侵,我链接到的博客系列中引用了该解决方案。)
关于android - 如何避免使用 SSL 信任 killer 应用程序绕过 Okhttp 证书固定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52277856/