首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SSLPinning无法在带有OKHTTTP的安卓<= 23上工作

SSLPinning无法在带有OKHTTTP的安卓<= 23上工作
EN

Stack Overflow用户
提问于 2020-05-23 00:50:48
回答 1查看 449关注 0票数 0

1-我们能够在<=23接口的burp套件工具中拦截请求/响应。2-当我将不正确的sha-256引脚传递给证书引脚时,它抛出异常com.android.volley.NoConnectionError: javax.net.ssl.SSLPeerUnverifiedException:证书引脚失败!3-当我传递正确的引脚时,它的工作请求获得成功。4-我们没有在网络安全配置中设置静态PIN码sha256。对于所有版本,我们都是以编程方式进行的。请检查一下我遗漏了什么。

使用'com.squareup.okhttp3',名称:'okhttp',版本:'3.11.0,网络安全配置为

代码语言:javascript
复制
<network-security-config>
    <base-config cleartextTrafficPermitted="true"/>
    <debug-overrides>
        <trust-anchors>
            <certificates src="user" />
        </trust-anchors>
    </debug-overrides>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">abc.com</domain>
    </domain-config>
</network-security-config>
**and ssl pinning android code**

public static HurlStack getOkHttpStack(Context context) {
        HurlStack stack = null;
        try {
            TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(
                    TrustManagerFactory.getDefaultAlgorithm());
            trustManagerFactory.init((KeyStore) null);
            TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
            if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
                throw new IllegalStateException("Unexpected default trust managers:"
                        + Arrays.toString(trustManagers));
            }
            X509TrustManager trustManager = (X509TrustManager) trustManagers[0];
            CertificatePinner certPinner = buildCertificatePinner(context);
            stack = new OkHttpStack(trustManager, certPinner);
        } catch (Exception e) {
            e.printStackTrace();
        }

        if (stack == null) {
            stack = new HurlStack();
        }
        return stack;
    }
**CertificatePinner object creation**

 private static CertificatePinner buildCertificatePinner(Context context) {

        CertificatePinner pinner = null;
          // COde ---
        return pinner;
    }
**Okhttp client object creation**

public OkHttpStack(X509TrustManager trustManager, CertificatePinner certPinner) throws Exception {
      OkHttpClient.Builder builder = new OkHttpClient.Builder();
      if (trustManager != null) {
          TLSSocketFactory factory = new TLSSocketFactory(trustManager);
          builder.sslSocketFactory(factory, trustManager);
      }
      if(certPinner != null){
          builder.certificatePinner(certPinner);
      }
      mClient = builder.build();
  }
EN

回答 1

Stack Overflow用户

发布于 2020-05-23 01:30:34

在API级别15和22之间,需要强制启用TLS 1.2。因此,在构建OkHttpClient时,您必须考虑到这一点。

代码语言:javascript
复制
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1) {
            SSLContext sc = SSLContext.getInstance("TLSv1.2");
            sc.init(null, null, null);
            okHttpClientBuilder.sslSocketFactory(new Tls12SocketFactory(sc.getSocketFactory()),
                    trustManager
            );
        } 
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61960019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档