You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Play不安全主机名验证告警修复咨询(动态BASE_URL场景)

问题解答

一、OkHttpClient代码修改要点

你的代码里有两个直接触发Google Play不安全告警的核心问题:

  • 自定义的TrustManager完全跳过证书链验证,等于信任所有未知证书,存在严重中间人攻击风险
  • hostnameVerifier直接返回true,完全不验证服务器主机名的合法性

针对动态BASE_URL的场景,可按以下方式修改:

1. 移除全信任证书配置

删掉自定义TrustManager、SSLContext相关代码,让OkHttpClient使用系统默认的证书验证逻辑——这是HTTPS安全的基础,不能省略。

2. 实现动态主机名验证逻辑

先维护一个线程安全的可信域名集合,在用户获取到动态BASE_URL后,解析出域名并加入该集合;然后修改hostnameVerifier,先通过系统默认逻辑验证证书与主机名的匹配性,再判断当前请求的主机名是否在可信集合中。

示例代码:

// 全局存储已验证的可信域名,保证线程安全
private static final Set<String> TRUSTED_HOSTNAMES = Collections.synchronizedSet(new HashSet<>());

// 从BASE_URL中提取主机名的工具方法
private static String getHostFromUrl(String baseUrl) {
    try {
        URI uri = new URI(baseUrl);
        return uri.getHost();
    } catch (URISyntaxException e) {
        e.printStackTrace();
        return null;
    }
}

// 获取到动态BASE_URL后,调用此方法添加可信域名
public static void addTrustedHost(String baseUrl) {
    String host = getHostFromUrl(baseUrl);
    if (host != null) {
        TRUSTED_HOSTNAMES.add(host);
    }
}

// 安全的OkHttpClient构建方法
public static OkHttpClient.Builder safeOkHttpClient() {
    OkHttpClient.Builder builder = new OkHttpClient.Builder();
    
    builder.connectTimeout(CONNECTION_TIMEOUT, TimeUnit.SECONDS);
    builder.retryOnConnectionFailure(true);
    builder.readTimeout(READ_TIMEOUT, TimeUnit.SECONDS);
    builder.writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS);
    builder.addInterceptor(apiCallBodyInterceptor());
    builder.followRedirects(true);
    builder.followSslRedirects(true);
    
    // 替换不安全的主机名验证逻辑
    builder.hostnameVerifier((hostname, session) -> {
        // 先使用系统默认验证逻辑检查证书合法性
        HostnameVerifier defaultVerifier = HttpsURLConnection.getDefaultHostnameVerifier();
        boolean isDefaultValid = defaultVerifier.verify(hostname, session);
        
        // 默认验证通过,或主机名在可信列表中,才允许连接
        return isDefaultValid || TRUSTED_HOSTNAMES.contains(hostname);
    });
    
    // 移除全信任SSL配置,使用系统默认设置
    return builder;
}

额外注意

获取动态BASE_URL的接口(即验证码验证后的请求),必须使用完全安全的配置——该接口的域名应该是固定的,直接用默认OkHttpClient即可,不能走动态验证逻辑,避免这个关键请求被篡改。

二、Glide 4.7.1是否会触发告警?

Glide 4.7.1本身不会默认关闭主机名或证书验证,除非你自定义了Glide的OkHttpClient,并且套用了和上述代码一样的不安全配置,否则不会导致该告警。

不过4.7.1是2018年的旧版本,存在不少已知的安全和稳定性问题,建议升级到Glide的最新稳定版本(如4.15.x系列),降低潜在风险。

内容的提问来源于stack exchange,提问作者AiVision

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 14:53:37