android 部分网址 https连接不上(Not trusted server certificate)

本文提供了一种解决方案来处理Android设备在连接HTTPS网站时遇到的信任证书问题。通过修改HTTP连接设置,可以绕过证书验证,适用于Android 4.1及更高版本。

问题:android连接部分https网站时会发生连接错误,报错信息类似:   Not trusted server certificate

            经过测试android4.1之后版本的都有类似问题

解决方法:

在自己封装的http类中添加以下代码,同时在http连接时使用HttpURLConnection connection = (HttpURLConnection) url.openConnection();即可解决问题

// always verify the host - do not check for certificate

    final static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier(){
        @Override
        public boolean verify(String hostname, SSLSession session) {
            DebugLog.logd("Approving certificate for " + hostname);
            return true;
        }
    };

    /**
      * Trust every server - dont check for any certificate
      */
    private static void trustAllHosts()
    {
        // Create a trust manager that does not validate certificate chains
        TrustManager[] trustAllCerts = new TrustManager[]{
            new X509TrustManager(){

                @Override
                public void checkClientTrusted(
                        java.security.cert.X509Certificate[] chain,
                        String authType)
                        throws java.security.cert.CertificateException {
                }

                @Override
                public void checkServerTrusted(
                        java.security.cert.X509Certificate[] chain,
                        String authType)
                        throws java.security.cert.CertificateException {
                }

                @Override
                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                    return new java.security.cert.X509Certificate[] {};
                }
                
            }
        };

        //Install the all-trusting trust manager
        try
        {
             HttpsURLConnection.setDefaultHostnameVerifier(DO_NOT_VERIFY);
             SSLContext sc = SSLContext.getInstance("TLS");
             sc.init(null, trustAllCerts, new java.security.SecureRandom());
             HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
    static{
        DebugLog.logd("trustAllHosts");
        trustAllHosts();

    }


参考:http://stackoverflow.com/questions/2012497/accepting-a-certificate-for-https-on-android

<think>嗯,用户在使用GitLab拉取项目时遇到了“server's certificate is not trusted”的错误。首先,我需要理解这个错误的原因。通常这种情况发生在SSL证书验证失败的时候。可能的情况包括自签名证书、证书过期、或者证书颁发机构被信任。 接下来,我需要考虑用户的使用场景。用户可能是在公司内部使用自签名的GitLab实例,或者是个人开发者在某些特定环境下遇到这个问题。如果是公司内部,可能需要用户安装内部CA的根证书。个人开发者可能更容易选择忽略证书验证,建议这样做。 用户的身份可能是开发人员,可能对Git和SSL证书太熟悉,所以需要给出简单易懂的解决方案。同时,用户可能需要快速解决问题,所以应该提供多种方法,比如临时绕过验证、安装证书或配置Git信任证书。 用户可能没有明确说明他们使用的操作系统,所以需要提供跨平台的解决方案,比如Git本身的配置,以及针对同操作系统(如Windows、Linux、macOS)的具体步骤。同时,用户可能需要知道如何获取证书文件,可能需要指导他们用浏览器导出证书或者联系管理员。 另外,用户可能知道长期忽略证书验证的风险,所以需要提醒他们安全性的问题,尤其是生产环境中建议禁用验证。需要平衡快速解决问题和保持系统安全之间的关系。 最后,需要检查步骤是否正确,例如git config的命令是否正确,安装证书的步骤是否清晰,以及是否涵盖了常见的情况。确保提供的解决方案是当前有效的,避免过时的命令或方法。</think>当从 GitLab 拉取项目时出现 `server's certificate is not trusted` 错误,通常表示 **本地系统信任 GitLab 服务器的 SSL 证书**。以下是可能的原因和解决方法: --- ### **常见原因** 1. **自签名证书** 企业或私有 GitLab 实例可能使用自签名证书(而非公共 CA 颁发的证书),系统默认信任此类证书。 2. **证书过期或配置错误** 服务器证书可能已过期,或证书链配置完整(如缺少中间 CA 证书)。 3. **网络中间人攻击** (罕见)某些网络代理或防火墙可能劫持 HTTPS 连接并替换证书,导致验证失败。 --- ### **解决方法** #### **1. 临时绕过证书验证(仅限测试环境)** ```bash git config --global http.sslVerify false ``` - **风险**:禁用 SSL 验证会暴露中间人攻击风险,**生产环境切勿使用**。 --- #### **2. 手动信任服务器证书** **步骤 1:获取服务器证书** - 用浏览器访问 GitLab 的 HTTPS 地址(如 `https://your.gitlab.com`)。 - 点击地址栏的锁图标 → 导出证书(通常为 `.pem` 或 `.crt` 格式)。 **步骤 2:将证书添加到系统信任库** - **Linux (Ubuntu/Debian)** ```bash sudo cp your-certificate.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates ``` - **Windows** 1. 双击 `.crt` 文件 → 选择“安装证书”。 2. 选择“本地计算机” → “将所有证书放入以下存储” → 浏览选择“受信任的根证书颁发机构”。 - **macOS** ```bash sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain your-certificate.crt ``` --- #### **3. 配置 Git 单独信任证书** ```bash git config --global http.https://your.gitlab.com.sslCAInfo /path/to/your-certificate.crt ``` - 仅针对特定 GitLab 域名信任证书,影响其他 HTTPS 连接。 --- #### **4. 检查系统时间与证书有效期** - 若本地系统时间错误(如 BIOS 电池耗尽导致时间重置),可能导致证书验证失败: ```bash date # 检查时间是否准确 ``` --- ### **企业环境建议** - 若为内部 GitLab,联系管理员获取企业根证书并安装到本地。 - 如果是公共 GitLab(如 `gitlab.com`),证书通常自动受信任,此错误可能表示网络被劫持,需谨慎处理。 --- ### **总结** 推荐优先安装证书(方法 2 或 3),避免禁用 SSL 验证。若问题持续,检查服务器证书是否有效或联系 GitLab 管理员。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值