当前位置: 首页 > 知识库问答 >
问题:

未使用okhttp找到证书路径的信任锚点

东方志尚
2023-03-14

所以我整晚都在努力让它发挥作用,但似乎没有任何效果。。。我一直在获取未找到的证书路径的信任锚点。

下面是我如何构建okhttpClient(我遵循https://medium.com/@sreekumar_av/certificate-public-key-pinning-in-android-using-Reformation-2-0-74140800025b)

fun provideOkHttpClient(): OkHttpClient {
    val httpClientBuilder = OkHttpClient()
            .newBuilder()

    val logging = HttpLoggingInterceptor()
    logging.level = if (BuildConfig.DEBUG)
        HttpLoggingInterceptor.Level.BODY
    else
        HttpLoggingInterceptor.Level.NONE


    val certificatePinner = CertificatePinner.Builder()
            .add(HOST, SHA)
            .build()

    val connectionSpec = ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
    connectionSpec.tlsVersions(TlsVersion.TLS_1_2).build()

    val tlsSocketFactory = TLSSocketFactory()
    return httpClientBuilder
            .certificatePinner(certificatePinner)
            .addNetworkInterceptor(logging)
            .sslSocketFactory(tlsSocketFactory, tlsSocketFactory.systemDefaultTrustManager())
            .connectionSpecs(Collections.singletonList(connectionSpec.build()))
            .build()
}

我得到的sha是这样的:openssl s|U客户端-连接主机:端口| openssl x509-pubkey-noout | openssl rsa-pubin-outform der | openssl dgst-sha256-binary | openssl enc-base64

以下是TLSFACORY:https://gist.github.com/pollux-/fbcc74984e110bb49497faa2d0ed5ee1#file-TLSSocketFactoryJava

我真的不明白为什么在那一点上它不起作用...

任何帮助都将不胜感激!

共有1个答案

伯茂才
2023-03-14

IIRC证书锁定仅在证书链被接受后进行评估。

拥有完整的stacktrace和您尝试连接的主机会有所帮助,因为它可能使用的是您的客户端不接受的自签名证书。

首先尝试在没有证书固定的情况下使其工作,然后将其添加到中。正如@commonware提到的,当证书固定失败时,它会告诉您该怎么做。

 类似资料:
  • 我遇到了Android4设备的一个问题,它在连接到服务器时收到以下异常: 但出于某种原因,我不明白它在Android4版本中开始失败了。 我尝试了信任所有证书的解决方案[LINK],它起作用了,但这显然存在安全问题,比如将您的应用程序暴露于“中间人”攻击 如何实现具有默认行为但仅将服务器的证书白名单的TrustManager。 在证书链给了我两个证书的格式: 用获得的url和证书替换了示例中的ur

  • 我有一个通过SSL从node.js提供服务的网站。当我使用web浏览器(桌面和Android)访问站点时。一切都很好--当我检查证书是有效的并且一切看起来都很好时,锁出现了,表明站点是安全的。这应该意味着服务器设置正确,对吧? 然而,当我尝试使用Android WebView对完全相同的站点时,页面无法加载--我甚至在日志中看不到对该网页的请求。安德烈,在放松logcat上的过滤器后,我注意到了这

  • 我正试图通过OKHttp和改装2提出请求。该请求应通过发送证书(必须是p12或crt)完成。我们尝试过不同的方法,但没有人允许我成功。我正在用badssl进行测试。com,它允许我请求此URL:https://client.badssl.com您可以在这里找到证书:https://badssl.com/download/ 我尝试将p12和crt包含在项目的assets文件夹和raw文件夹中,并创建

  • 我正在Android上开发一个客户端应用程序,它连接到我的服务器,它在负载均衡器后面的AWS上,我在GoDaddy上创建了一个SSL证书,并将其添加到负载均衡器上。 浏览器上的一切都很顺利,它可以识别证书,但是当我试图用Android调用API时,我遇到了一个例外: 我找到了一些讨论谁说在app上添加证书,但是在证书服务器端是不是就没有办法修复了呢?这不是证书的问题吗?

  • 问题内容: android应用有三台主机进行身份验证和授权。最终主机是REST API。首次使用Oauth身份验证和授权过程,它可以正常工作。 但是,如果 用户 在登录并访问REST API提供的服务后 杀死了该应用程序 ,然后再次打开该应用程序,则会出现此问题。 在这段时间内,身份验证和授权过程不会发生,只有REST API会发生。 这是造成原因, 但在首次使用(登录然后使用该应用程序)期间正在

  • 问题内容: 我正在尝试建立与HTTPS站点的连接,并且我GOT打印例外:。 我的原始代码如下: 然后,我在这里阅读了Google的文章,并将代码修改为: 关于文件,我使用此站点来检查该站点的证书。我发现了3个证书,我不知道该使用哪个证书。我一一尝试。 一个名称“ VeriSign 3类公共主要证书颁发机构-G5”导致以下例外: 当我使用一个名称为“ VeriSign Class 3 Secure