【问题标题】:Android Studio: Server's certificate is not trustedAndroid Studio:服务器的证书不受信任
【发布时间】:2014-11-29 07:47:24
【问题描述】:

忽略此警告是否安全?当我在 Android Studio 中创建一个新项目时它会出现:

Server's certificate is not trusted

Certificate details

Issued To

CN (Common Name)       *.google.com
O (Organization)       Google Inc
L (Locality)           Mountain View
C (Country)            US
ST (State or Province) California

Issued By

CN (Common Name)       Google Internet Authority G2
O (Organization)       Google Inc
C (Country)            US

Validity Period

Valid from:            9/24/14
Valid until:           12/23/14

...

日期看起来没问题,我检查了我的计算机的日期设置以确定。否则为什么会“不可信”?

【问题讨论】:

    标签: android-studio certificate


    【解决方案1】:

    Android Studio 具有服务器证书配置(这也适用于 PyCharm 等其他 IntelliJ 平台)

    转到文件->设置。在 IDE 设置 部分中选择 服务器证书

    注意:较新的 IntelliJ 它位于 File->Settings->Tools->Server Certificates 中,如 cmets 中所述。

    我自己我只是选中了自动接受复选框,点击应用,然后就不必处理它了。如果您担心安全性,还可以选择在它们出现时一次添加 1 个。

    在我的情况下,我这样做是因为我已经将 *.google.com 证书配置为已接受,但我仍然得到了弹出窗口。我怀疑指纹改变了,如果我删除然后接受错误就会消失,但我决定通过选中复选框让它消失。

    【讨论】:

    • 在 IntelliJ IDEA 15 中,复选框位于:文件 > 设置 ... > 工具 > 服务器证书 > 自动接受不受信任的证书
    • 您拒绝投票是因为我选择这样做吗?我从来没有说过你应该这样做。如果 NSA 想要将新的 SDK 推送到我的开发环境中,那么世界一定不会再那么可怕了。
    • 是的。它不如添加您需要的证书最佳。鉴于有人来到该站点并寻找快速解决方案,他们的第一个选择应该是添加证书而不是盲目地信任所有未签名的
    • 我接受了上述帖子和 cmets 中提到的不受信任的证书,但没有任何效果。看到“错误:原因:无法找到请求目标的有效证书路径”
    • 感谢您的回答,但这是否也用于单元测试?我仍然得到一个 SSL 握手异常,但使用 Postman 就可以了。
    【解决方案2】:

    忽略该警告是不安全的。有人可能会尝试使用伪造证书进行中间人攻击,以便通过更新过程在您的计算机上安装恶意软件。这可能不会发生,但在安全方面做正确的事情总是更好。

    您应该将您信任的根证书添加到 Android Studio 密钥库。密钥库的位置和默认密码应列在该警告的底部。例如,我的地址是~/Library/Caches/AndroidStudio/tasks/cacerts。接下来,您需要在服务器提供的链中找到根证书。不幸的是,警告没有列出整个链,所以需要一些工作才能找到它。 Google Internet Authority G2 证书与用于签署 google 网站证书的证书相同。您可以通过访问 google.com 在 Chrome 中查看链,单击绿色锁,然后单击连接选项卡中的“证书信息”。此时,您可以验证警告中的哈希值是否与真实 G2 证书的哈希值匹配。您还会看到根证书被命名为Equifax Secure Certificate Authority。您可以从https://www.geotrust.com/resources/root-certificates/ 下载它。接下来,您需要将其添加到密钥库中:

    keytool -import -alias equifaxca \
    -file Equifax_Secure_Certificate_Authority.pem -keystore cacerts
    

    最后,重启 Android Studio。该警告应在 2018 年 8 月 22 日之前再次出现,除非有人实际出示了假证书。

    【讨论】:

    • 我曾经遇到过同样的问题,并通过在 cacerts 文件中添加证书来解决它。但是现在当我尝试更新 Android Studio 时,它会失败并显示以下消息:Android Studio update failed cacerts modified。修改 cacerts 文件后是否尝试过更新 Android Studio?
    • @MonishKamble 我已经有一段时间没有做 android 开发了,但是是的,在修改 cacerts 文件后,这些年来我能够更新好几次。我会在一个新问题中询问您的错误消息。
    【解决方案3】:

    我在添加一个带有非标准证书颁发机构 (CA) 签名的 SSL 证书的 maven 存储库后遇到了这个问题。

    从命令行为我的项目运行 gradle 构建时,一切正常(我已将自定义 CA 添加到我的机器 Java 安装 cacerts)。但是,我在从 Android Studio 运行构建时遇到了问题,并且出现了如下错误:

    > Could not resolve joda-time:joda-time:2.9.9.
      > Could not get resource 'https://custom-maven-repo.com/repository/releases/joda-time/joda-time/2.9.9/joda-time-2.9.9.pom'.
        > Could not GET 'https://custom-maven-repo.com/repository/releases/joda-time/joda-time/2.9.9/joda-time-2.9.9.pom''.
          > sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
            > PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
              > unable to find valid certification path to requested target
    

    我为自定义 CA 下载了 pem 文件,名为 my-ca.pem。我尝试在 Preferences -> Tools -> Server Certificates 中将此添加到 Android Studio,但这并没有修复它。

    我注意到 Android Studio 使用嵌入式 JDK(文件 -> 项目结构 -> SDK位置 -> JDK 位置/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home。为了让证书被接受,我运行(在 Mac OS X 上)这些命令来添加证书,然后终止 Android Studio java 进程:

    /Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home/bin/keytool -import -alias my-ca -keystore /Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home/jre/lib/security/cacerts -storepass changeit -file path/to/my-ca.pem -noprompt
    kill -9 $(ps -A | grep java | grep "Android Studio" | grep -v grep | awk '{print $1}')
    

    然后从 Android Studio 运行 gradle 构建。

    另一种解决方案是使用 文件 -> 项目结构 -> SDK位置 -> JDK位置

    【讨论】:

    • 您的回答确实很有帮助,我在过去 3-4 天一直在努力解决这个问题,并且没有观察到 Android Studio 正在使用它自己的 SDK,而 cacerts 没有所有证书。在那里添加证书后,我的问题得到了解决。非常感谢,非常感谢您的回答。
    • 我在另一个线程上有一个类似问题的答案,如果有人想检查一下,它可能会有所帮助:stackoverflow.com/a/64997148/1971428
    • 完美!我几乎浪费了 5 个小时来解决它。最终卸载并重新安装 react-native
    • 我遇到了完全相反的问题。 Android Studio 一切正常,而我们的构建服务器使用命令行并出现此错误。直到这个答案我才意识到java安装中有一个单独的cacerts。您可以使用以下命令/usr/libexec/java_home找到java安装。
    【解决方案4】:

    对于 Mac 操作系统,它位于菜单 Android Studio->Preferences->Tools->Server Certificates 中。

    在右侧窗口的顶部选中复选框自动接受不受信任的证书。点击应用并确定。

    【讨论】:

    • 在防火墙后面的企业环境中,使用企业根自行颁发的证书:不要选中自动接受不受信任的证书,而是单击对话框的已接受证书部分中的加号添加按钮,然后添加您的企业自颁发证书(从 mac KeyChain 应用程序登录或系统证书导出)。
    【解决方案5】:

    从 AndroidStudio 1.5.1 开始,您可以转到 Preferences -> Tools -> Server Certificates 并单击 + 按钮手动添加应受信任的证书。

    【讨论】:

      【解决方案6】:

      它缺少特定于 Java 的系统证书。如果您使用的是 Ubuntu 和 Oracle JRE/JDK,请安装 ca-certificates-java 包。

      【讨论】:

        【解决方案7】:

        我经常关注SELF_SIGNED_CERT_IN_CHAIN 错误。 在node.js中解决npm解决了证书问题。

        npm config set cafile /path/to/cert.pem
        

        见下文 https://mmx5002.blogspot.com/2020/02/selfsignedcertinchain.html

        【讨论】:

          猜你喜欢
          • 2020-11-14
          • 2012-02-26
          • 2011-08-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-05
          • 2011-10-07
          相关资源
          最近更新 更多