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

Flutter使用SSL Pinning插件遇平台异常:指纹不匹配问题咨询

Flutter SSL Pinning 指纹不匹配及参数疑问解答

1. 指纹来源问题

必须使用服务器SSL证书的SHA1/SHA256指纹,和项目的签名指纹无关(项目签名指纹用于应用签名验证,和SSL证书不相关)。

  • 获取服务器指纹的终端命令:
    • SHA1:openssl s_client -connect 你的域名:443 | openssl x509 -noout -fingerprint -sha1
    • SHA256:openssl s_client -connect 你的域名:443 | openssl x509 -noout -fingerprint -sha256
  • 注意:插件要求的指纹格式通常是去掉冒号的十六进制字符串,不需要做Base64解码。你代码中对sslFingerPrint做Base64解码的逻辑是错误的,直接使用原始指纹去掉冒号后的字符串即可。

2. headerHttp 参数说明

该参数用于传入目标接口需要的HTTP请求头:

  • 如果接口是无额外要求的普通GET请求,传空字典{}完全没问题;
  • 如果接口需要认证头、自定义头(比如Authorization、Content-Type),就把对应键值对传入,示例:
    headerHttp: {
      'Authorization': 'Bearer your_access_token',
      'Content-Type': 'application/json'
    }
    

修正后的代码示例

Future<bool> _verifySSlCertificate(String url) async {
    try {
      if (!url.contains(serverURl)) {
        debugPrint('Overriding SSL Pinning, url is different ::: ' + url);
        return true;
      }
      // 替换为你的服务器SHA1指纹(去掉冒号的字符串)
      String serverSha1Fingerprint = "A1B2C3D4E5F6A7B8C9D0E1F2A3B4C5D6E7F8A9B0";

      String result = await SslPinningPlugin.check(
          serverURL: url,
          httpMethod: HttpMethod.Get,
          headerHttp: {}, // 无额外需求则传空
          sha: SHA.SHA1,
          allowedSHAFingerprints: [serverSha1Fingerprint],
          timeout: 50);
      debugPrint('SSL Pinning result::: ' + result);
      return result == 'CONNECTION_SECURE';
    } catch (e) {
      debugPrint(e.toString());
      return false;
    }
  } 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:57:24