【问题标题】:Accept Self-Signed Certificates in Android Studio Java Code在 Android Studio Java 代码中接受自签名证书
【发布时间】:2017-11-02 16:00:16
【问题描述】:

我正在尝试连接到在 Android Studio 中使用自签名证书的网站。我遇到了错误

java.security.cert.CertPathValidatorException:信任锚 找不到认证路径

对于我调用 openStream() 的 URL 对象。

由于我的代码处于测试环境中,我正在寻找一种解决方案,可以完全禁用证书检查,或者明确允许证书。

我昨天花了几个小时寻找解决方案,但每个指南都有几年的历史,并且使用了已弃用的 HTTP 库。

【问题讨论】:

    标签: java android ssl


    【解决方案1】:

    除了@CommonsWare 的回答之外,如果您以 API 14 (ISC) 或更高版本为目标,您可以选择在应用程序之外的设备上安装其他受信任的证书。可以在here 找到说明。

    使用这种方法安装的证书被设备上的所有应用程序使用。

    在 API 14-23 上,默认情况下将信任用户安装的证书。但是,在 API 24 (Nougat) 上,对用户添加证书的处理发生了变化,默认情况下它们不受信任。为了使用户定义的证书受信任,请将以下代码添加到network config

    <network-security-config>  
          <base-config>  
                <trust-anchors>  
                    <!-- Trust preinstalled CAs -->  
                    <certificates src="system" />  
                    <!-- Additionally trust user added CAs -->  
                    <certificates src="user" />  
               </trust-anchors>  
          </base-config>  
     </network-security-config>
    

    有关 Nougat 中与证书处理相关的更改的更多信息,请访问 here

    【讨论】:

    • 所有建议的修复似乎都不适合我。我的问题是模拟器本身阻止了证书吗?我找不到在我的 Nexus 5 模拟器中添加证书的方法。
    • @Keifer,那么我建议您在问题中添加更多信息:模拟器类型、操作系统版本、您尝试过的和失败的内容
    【解决方案2】:

    如果您的 minSdkVersion 为 24 或更高,或者您只需要在此类设备上进行此测试,您可以通过 network security configuration 配置您的自签名证书。

    如果您的minSdkVersion 为17 或更高,您可以使用my backport of network security configuration,最好使用OkHttp。

    或者,using self-signed certificates with OkHttp 有其他配方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-21
      • 2015-12-25
      • 2014-03-24
      • 1970-01-01
      • 2017-04-18
      • 1970-01-01
      • 1970-01-01
      • 2013-10-29
      相关资源
      最近更新 更多