添加Taboola SDK遇unable to find valid certification path错误
配置详情
- 项目根目录
build.gradle仓库配置:
repositories { ... maven { url 'https://taboolapublic.jfrog.io/artifactory/mobile-release' } ... }
- App模块
build.gradle依赖配置:
implementation 'com.taboola:android-sdk:3.8.15'
构建报错
核心错误提示:
Cause: unable to find valid certification path to requested target
详细错误堆栈:
Could not resolve com.taboola:android-sdk:3.8.15.
Could not get resource 'https://taboolapublic.jfrog.io/artifactory/mobile-release/com/taboola/android-sdk/3.8.15/android-sdk-3.8.15.pom'.
Could not GET 'https://taboolapublic.jfrog.io/artifactory/mobile-release/com/taboola/android-sdk/3.8.15/android-sdk-3.8.15.pom'.
服务器可能不支持客户端请求的TLS协议版本: (TLSv1.2, TLSv1.3)。你可能需要配置客户端允许使用其他协议。
PKIX路径构建失败: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
补充信息
同一台机器的浏览器可以正常访问该POM文件链接。
解决方法
1. 导入服务器证书到JVM信任库(推荐)
- 用浏览器打开目标POM链接,导出网站的SSL证书(保存为
.crt格式) - 找到项目使用的JDK/JRE的信任库路径,一般为
{JDK安装目录}/jre/lib/security/cacerts - 执行keytool命令导入证书:
keytool -import -alias taboola-jfrog -keystore /path/to/your/cacerts -file /path/to/exported/certificate.crt
默认信任库密码为changeit,按提示确认导入即可。
2. 临时跳过证书校验(仅测试用,生产环境禁用)
在项目根目录的gradle.properties中添加:
org.gradle.jvmargs=-Djavax.net.ssl.trustStoreType=JKS -Djavax.net.ssl.trustStore=/dev/null -Djavax.net.ssl.trustStorePassword=changeit
3. 调整Gradle的TLS协议配置
在项目根目录build.gradle的仓库配置中指定TLS版本:
repositories { ... maven { url 'https://taboolapublic.jfrog.io/artifactory/mobile-release' ssl { enabledProtocols = ["TLSv1.2", "TLSv1.3"] } } ... }
或者在gradle.properties中添加全局配置:
systemProp.jdk.tls.client.protocols=TLSv1.2,TLSv1.3
内容的提问来源于stack exchange,提问作者Vishwajit Palankar

