android - 如何避免使用 SSL 信任 killer 应用程序绕过 Okhttp 证书固定?

标签 android security ssl retrofit2 okhttp

为了安全起见,我正在使用 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/

相关文章:

database - 如何从远程 Db2 实例连接到 IBM Db2 Event Store 实例?

java - 编译 Firebase 和 Google?

java - 插件的安全限制?

java - 如何保护客户端/服务器套接字通信

.net - 从部分受信任的代码中调用非托管代码的正确方法

ssl - 未连接到互联网的笔记本电脑的有效 SSL 证书

Android MediaPlayer 流式传输在网络更改时停止

java - 发送文件时在同一个套接字连接上发送消息

android - 在真实设备上运行我的应用程序时出现问题

c - C语言使用公钥文件加密数据