gpt4 book ai didi

android - 在我的服务器和我的客户端之间启用 HTTPS 通信

转载 作者:行者123 更新时间:2023-12-04 22:43:25 30 4
gpt4 key购买 nike

我已经构建了一个服务器应用程序和一个安卓应用程序。到目前为止,他们通过 http 进行通信,但我在每个请求中发送敏感信息(如 JWT)。因此我需要使用 Https 来代替。

我已经生成了一个 p12 证书。

在服务器端:

  • 我已将证书复制到 resources/keystore/sampleName.p12
  • 我已将这些行添加到我的 application.properties
    server.ssl.key-store-type=PKCS12
    server.ssl.key-store-password=samplePassword
    server.ssl.key-store=classpath:keystore/sampleName.p12
    server.ssl.key-alias=sampleName

  • 在 android 端,我使用 okHttp 并像这样创建客户端
    val httpClient = OkHttpClient.Builder()
    .certificatePinner(
    CertificatePinner.Builder()
    .add(
    https://10.0.2.2:8080,
    "sha256/lVIcG+gpmlabsq1bW5RbvB+kqVSHKdOFyoxjo9+SLEs="
    ).build()
    )
    .build()

    我用 https://10.0.2.2:8080因为我只在本地运行服务器应用程序,而且我还在同一台笔记本电脑上的模拟器上运行 android 应用程序。

    获取 sha256/lVIcG+gpmlabsq1bW5RbvB+kqVSHKdOFyoxjo9+SLEs=我用过 keytool -list -v -keystore sampleName.p12 -storetype PKCS12 -storepass samplePassword并将十六进制的sha256指纹转换为base64。

    现在,当我尝试向服务器发送任何请求时,我得到一个
    javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found
    我显然错过了一些东西,但我不知道是什么。还有什么我需要做的吗?还是我做错了什么?或者它只是不应该在本地工作?

    请注意,这对我来说只是一个练习,我不会在任何真实服务器上实际部署服务器应用程序,也不会发布 android 应用程序。

    但是我仍然会提出解决方案,并且我真的希望它是可靠的并且可以在本地工作。

    最佳答案

    CertificatePinning 是对正常证书检查的补充。它只会进一步限制证书的选择,因为默认情况下您将接受主机的任何证书。

    Adding a custom certificate to an OkHttp Client对于现有的答案。

    或者在这里阅读

    https://github.com/square/okhttp/blob/master/samples/guide/src/main/java/okhttp3/recipes/CustomTrust.java

    https://square.github.io/okhttp/4.x/okhttp/okhttp3/-certificate-pinner/

    关于android - 在我的服务器和我的客户端之间启用 HTTPS 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61302017/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com