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
- SHA1:
- 注意:插件要求的指纹格式通常是去掉冒号的十六进制字符串,不需要做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
相关产品推荐
相关产品推荐

