错误:原因:无法找到请求目标的有效认证路径

99

当我同步Gradle时,在Android Studio 2.2.3中出现了以下错误:

Error:Cause: unable to find valid certification path to requested target

我该如何解决这个问题?

我还附上了我的Gradle文件。

apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
    applicationId "com.sample.myapplication"
    minSdkVersion 16
    targetSdkVersion 22
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
} } dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:design:23.4.0'
compile 'com.android.support:palette-v7:23.4.0'
testCompile 'junit:junit:4.12'
// FireBase
compile 'com.google.firebase:firebase-messaging:9.0.0'
}//Add this line
apply plugin: 'com.google.gms.google-services'

以及项目级别的Gradle文件

buildscript {
repositories {
    jcenter()
}
dependencies {
    classpath 'com.android.tools.build:gradle:2.2.3'
    classpath 'com.google.gms:google-services:3.0.0'
}
}
allprojects {
repositories {
    mavenCentral()
    jcenter{ url "http://jcenter.bintray.com/" }
    maven { url "https://jitpack.io" }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}

1
我之前遇到过这个问题,通过正确退出应用程序、重启电脑,然后打开应用程序并重新构建 graddle,问题得以解决。可能是本地缓存问题导致的。我指的是 Android Studio 应用程序。 - Smit
1
@Smit 我也尝试了那个,但还没有解决。 - Renjith Krishnan
你是在家里还是在公司大楼里工作? - Bisonfan95
@Bisonfan95 公司 - Renjith Krishnan
当我尝试从公司网络构建项目时,我也遇到了Gradle问题。最有可能的原因是代理墙。必须解决这个问题。 - Bisonfan95
显示剩余7条评论
25个回答

100

这个问题可能是由于一些受限制的互联网连接造成的... 如果你在某个受限制的网络上安装构建工具,所需的证书可能无法安装... 所以尝试更改网络连接... 对我很有用.....


对我来说有效... 之前,我在大学网络上工作,但我改用智能手机网络后,它对我有效。 - Vinod Kumar Chauhan
3
没错,这也对我有用。当时我在公司网络上,后来换了个网络就好了。 - Beezer
1
遇到了同样的问题,结果发现我开启了代理。禁用它后问题得以解决。 - Ivan Leong
禁用Web代理排序: https://dev59.com/6VoV5IYBdhLWcg3wXN3j#62836938 - yoAlex5
1
重新启动Charles代理并禁用代理、SSL和录制。 - yoAlex5

74

我遇到了同样的问题,但通过添加以下内容解决了它

maven { url "http://jcenter.bintray.com"}

项目级别的Gradle文件

buildscript {
repositories {
    jcenter()
    maven { url "http://jcenter.bintray.com"}
}
dependencies {
    classpath 'com.android.tools.build:gradle:2.2.3'
    classpath 'com.google.gms:google-services:3.0.0'
}
}
allprojects {
repositories {
    mavenCentral()
    jcenter{ url "http://jcenter.bintray.com/" }
    maven { url "https://jitpack.io" }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}

好的,但是为什么会起作用?这里发生了什么导致了这个问题? - red888
我的问题是与 McAffee 有关。在 gradle 正确同步之前,我必须将其禁用。 - James

41

"无法找到请求目标的有效认证路径"

如果您收到此消息,可能是因为您所在公司的代理服务器签署了所有请求证书并使用您公司的根CA证书进行签名。该证书仅在公司内部受信任,因此Android Studio无法验证任何使用您公司证书签名的证书是否有效。因此,您需要告诉Android Studio信任您公司的证书,方法是将您公司的证书添加到Android Studio的信任库中。

(我在macOS上操作,但在Linux或Windows上应该类似)

  • 首先,您需要将您公司的根CA证书保存为文件:您可以向IT部门索取此证书,或自行下载,以下是如何操作。打开您的浏览器并打开此网址,例如:https://jcenter.bintray.com/https://search.maven.org/,单击图标,然后单击显示证书

enter image description here

在弹出窗口中,要将根证书保存为文件,请确保选择证书链的顶级(根证书),并将证书图像拖到磁盘驱动器上的文件夹/目录中。它应该保存为一个文件,例如:my-root-ca-cert.cermy-root-ca-cert.pem

enter image description here

  • 其次,让我们将此证书添加到Android Studio接受的服务器证书中:

在Android Studio中打开首选项->工具->服务器证书,在已接受的证书框中,单击加号图标(+),搜索您以前保存的证书,然后单击应用确定

enter image description here

  • 第三步,您需要将证书添加到Android Studio JDK信任库中(Gradle使用此JDK构建项目,因此很重要):

在Android Studio中打开文件->项目结构->SDK位置->JDK位置

enter image description here

复制JDK位置的路径,打开终端并将目录更改为该路径,例如,执行:

cd /Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home/

(不要忘记转义空格,"\ ")

现在,将证书导入信任存储库,请执行:

./bin/keytool -importcert -file /path/to/your/certificate/my-root-ca-cert.cer -keystore ./jre/lib/security/cacerts -storepass changeit -noprompt
  • 最后,重新启动Android Studio,或者更好的选择点击文件->无效缓存/重启

完成,现在应该可以构建您的项目了。

  • 最后,重新启动Android Studio,或者更好的选择点击文件->无效缓存/重启
  • 完成,现在应该可以构建您的项目了。


    损坏的图像没有帮助,但这个答案确实解决了我的问题。我最初跳过了最后一步,而那才是我真正需要的。 - IanCaz
    2
    如果您使用JDK 11,则./jre/lib/security/cacerts应更改为./lib/security/cacerts。 - Vadim Eksler
    1
    那最后一步真的让我开心。谢谢,伙计。 - Yougansh Thakur
    1
    好的解释,甚至更好的解决方案,即使在2023年也能正常运作。非常感谢!顺便说一下,如果有人像我一样使用Android Studio预览版本,那么密钥库的路径是:lib/security/cacerts - Damercy

    13

    我之前在使用Maven构建时遇到了这个问题。这是因为我在限制性的办公网络中工作。您需要在密钥库中导入所需的证书。

    按照下面问题答案中的步骤进行操作: "unable to find valid certification path to requested target", but browser says it's OK

    (对于文件名/路径名,请使用双引号)

    注意:我现在找不到确切的解决问题的来源,如果我找到了,我会更新它。


    https://dev59.com/L18e5IYBdhLWcg3wAWrs?answertab=votes#tab-top 对我有用 - Ali Ashraf
    1
    对于Intellij Idea:https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000094584-IDEA-Ultimate-2016-3-4-throwing-unable-to-find-valid-certification-path-to-requested-target-when-trying-to-refresh-gradle。 - Bechyňák Petr
    我尝试添加证书,但没有帮助。 - Anukool srivastav

    13

    在“工具”→“Android”→“SDK 管理器”→“工具”→“服务器证书”中导入您公司的证书。


    这可能是正确的答案,只需在设置证书后确保重新启动IntelliJ。 - dardo
    1
    我从 https://bintray.com/bintray/jcenter 添加了证书。重启工作室后,构建成功了。 - IfOnly
    @IfOnly 你能提供获取jcenter证书的链接吗? - JPM

    8
    我刚遇到了类似的问题,并发现一系列步骤确实帮助了我。 当然,其中一些步骤是更换到更强的、更好的网络,或者如果你只有一个网络,则尝试重新连接到网络,然后简单地使Android Studio失效/重新启动。 如果仍然显示错误,则需要在repositories中添加"maven",并将其指向如下所示的链接: maven { url "http://jcenter.bintray.com"}
    最后,前往 *文件 *设置 *构建、执行和部署 *Gradle *Android Studio --------并检查启用maven存储库选项。
    之后,简单地清理和重新构建您的APP,您就可以运行了。

    1
    设置 Android Studio > 启用嵌入式Marvin存储库 似乎最终使事情正常工作。谢谢。 - Ben

    7

    如果您在办公室,请使用您的智能手机网络。我认为它会起作用。


    1
    这个救了我的一天。 - dhamini poornachandra
    9
    这并不是一个解决方案。 - Phil
    它对我有用,因为我的公司网络有更多的安全措施。 - ozanurkan

    6

    如果您在企业代理后面运行并使用SSL拦截,您需要按照以下步骤信任HTTPS的代理证书:

    • 在Android Studio中,打开文件 -> 设置
      • 在工具 -> 服务器证书中
        • 勾选“自动接受非受信任的证书”
        • 同时点击“+”,手动添加企业代理根证书。
      • 在外观和行为 -> 系统设置 -> HTTP代理中
        • 设置您的企业代理URL和端口详细信息
    • 下载KeyStore Explorer:http://keystore-explorer.org/downloads.html
    • 在KeyStore Explorer(以管理员身份运行)中,打开Android Studio JRE证书存储:C:\Program Files\Android\Android Studio\jre\jre\lib\security\cacerts
      • 密码应为“changeit”
      • 导入企业代理根证书,并保存。
    • 在Android Studio中,选择文件 -> 清除缓存并重启

    谢谢,解决了我的问题,这正是我遇到的问题,由于内部代理限制。 - rodolfocop

    4
    我曾经遇到过同样的问题,我通过删除/注释gradle.properties中的代理设置来解决它。请检查您的gradle.properties文件,如果您有以下内容,请注意去除或注释掉:
    systemProp.https.proxyPort=8080
    systemProp.http.proxyHost=192.168.1.1
    systemProp.https.proxyHost=192.168.1.1
    systemProp.http.proxyPort=8080
    

    用#进行注释。将会呈现如下效果

    #systemProp.https.proxyPort=8080
    #systemProp.http.proxyHost=192.168.1.1
    #systemProp.https.proxyHost=192.168.1.1
    #systemProp.http.proxyPort=8080
    

    1
    Or just remove entirely. - Zoe stands with Ukraine
    @Zoe 是的,我们可以这样做,但是如果将来需要呢?更好的选择是添加注释。 - Vijay
    1
    这解决了我的问题 - 我是指移除 https 代理! - avijendr

    3

    在更新了Android Studio和Gradle之后,我遇到了一个问题,在日志文件中提示我一些Maven存储有证书问题。

    有人建议我尝试重新启动Studio,但并没有解决问题;还有人说我们应该设置JRE环境,但我不知道如何在Mac上进行设置。因此,我尝试重新启动Mac,并启动Studio,发现出现了这个提示:enter image description here

    所以问题就浮出水面了: 解决方案: 第一步:重新启动计算机,因为在更新Android Studio后会出现太多问题。 第二步:使用旧的Gradle工具或者下载*pom和jar文件,放入正确的文件夹中。


    当我的同事更新了工作室,我没有更新,错过了相同的问题。然后我更新了工作室,但问题再次出现。我尝试了很多解决方案,直到这个解决了我的问题。我的电脑是Mac。 - kan137g
    我又错过了同样的问题,上面所有的解决方案描述都不起作用,然后我关闭了Charles并重新启动了工作室,问题解决了。 - kan137g

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接