HarmonyOS 鸿蒙Next https 请求是否可以不需要证书校验

发布于 1周前 作者 gougou168 来自 鸿蒙OS

HarmonyOS 鸿蒙Next https 请求是否可以不需要证书校验

https请求的时候,可以根据需要设置忽略证书的能力。

问题场景描述:我们公司内网的一些测试域名,使用的是私签证书,在内部测试的时候,会使用内部服务器的域名地址,如果不忽略证书校验或者不把证书加入信任锚点,接口就会请求失败。在开发或测试环境中,可能需要忽略证书校验。

  1. 在Web开发中,在浏览器比如使用了axios库中,我们可以通过配置axios实例时传递httpsAgent来实现忽略证书校验。

    const httpsAgent = new (window as any).require('https').Agent({ rejectUnauthorized: false, });
    // 创建axios实例并配置httpsAgent
    const axiosInstance = axios.create({ httpsAgent, });
    // 发起请求
    axiosInstance.get('https://example.com/api/data')
    .then(response => {
      console.log(response.data);
    })
    .catch(error => {
      console.error(error);
    });
    
  2. 在Android开发中,

    public class HttpClient {
      public static void main(String[] args) {
        try {
          // 创建一个自定义的TrustManager,用于信任所有证书
          TrustManager[] trustAllCerts = new TrustManager[]{
            new X509TrustManager() {
              @Override
              public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {}
              @Override
              public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {}
              @Override
              public java.security.cert.X509Certificate[] getAcceptedIssuers() { return new java.security.cert.X509Certificate[]{}; }
            }
          };
          // 配置OkHttpClient,通过SSLSocketFactory设置信任所有证书
          OkHttpClient client = new OkHttpClient.Builder()
            .sslSocketFactory(getSSLSocketFactory(trustAllCerts), (X509TrustManager) trustAllCerts[0])
            .hostnameVerifier((hostname, session) -> true) // 忽略主机名校验
            .build();
          // 创建请求
          Request request = new Request.Builder()
            .url("https://example.com/api/data")
            .build();
          // 发起请求
          Response response = client.newCall(request).execute();
          System.out.println(response.body().string());
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    
      private static SSLSocketFactory getSSLSocketFactory(TrustManager[] trustManagers) throws Exception {
        SSLContext sslContext = SSLContext.getInstance("SSL");
        sslContext.init(null, trustManagers, new java.security.SecureRandom());
        return sslContext.getSocketFactory();
      }
    }
    
  3. 在iOS开发中,比如使用了AFNetworking网络库,我们可以这样设置

    // 创建一个AFHTTPSessionManager实例
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    // 创建一个AFSecurityPolicy实例,用于配置证书校验策略
    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
    securityPolicy.allowInvalidCertificates = YES; // 允许使用无效证书
    securityPolicy.validatesDomainName = NO; // 不验证域名
    // 设置AFHTTPSessionManager的securityPolicy
    manager.securityPolicy = securityPolicy;
    // 发起请求
    [manager GET:@"https://example.com/api/data" parameters:nil progress:nil success:^(NSURLSessionDataTask *task, id responseObject) {
      NSLog(@"Success: %@", responseObject);
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
      NSLog(@"Error: %@", error);
    }];
    

更多关于HarmonyOS 鸿蒙Next https 请求是否可以不需要证书校验的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

https标准协议需要校验证书。不校验证书违反安全规范。 暂时不会考虑支持忽略证书

更多关于HarmonyOS 鸿蒙Next https 请求是否可以不需要证书校验的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中,关于HTTPS请求是否可以不进行证书校验的问题,答案通常是不建议也不推荐跳过证书校验。证书校验是HTTPS协议安全性的重要组成部分,它确保了客户端与服务器之间的通信不被第三方篡改或窃听。

在鸿蒙系统中进行网络请求时,如果跳过证书校验,将会使应用容易受到中间人攻击(MITM),攻击者可以伪造服务器证书,从而拦截或篡改传输的数据。这不仅威胁到用户数据的安全,也可能导致应用功能异常或崩溃。

虽然技术上可以实现不校验证书的请求(例如,在HTTP客户端配置中禁用证书验证),但这通常被视为一种安全风险,并不符合最佳实践。

因此,为了确保应用的安全性和数据的完整性,建议开发者在鸿蒙系统中坚持使用证书校验,并遵循HTTPS协议的安全规范。

如果开发者有特殊需求需要在某些场景下跳过证书校验(例如,在测试环境中),应充分了解相关风险,并采取相应的安全措施来减轻这些风险。但请注意,这种做法仅适用于特定场景,不应成为生产环境中的常规做法。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部