android - 使用有效证书调用后端 API 时发生握手错误
问题描述
当应用程序尝试将 https 发布到我们的生产 API 服务时,我的一位客户收到 CERTIFICATE_VERIFY_FAILER 错误。该服务使用有效的 CA 进行签名。到目前为止,只有一个人报告过。
异常错误:HandshakeException:客户端握手错误(OE 错误:CERTIFICATE_VERIFY_FAILER:证书链中的自签名证书(handshake.cc:352))
客户进行了恢复出厂设置,但没有解决。他们在三星 S6 上使用该应用程序。他们在同一个wifi上还有另外两部手机可以正常工作。该问题同时出现在 wifi 和手机数据上。我尝试升级到最新版本的颤振(v1.6.3-pre.15)。他们仍在报告这个问题。我一直无法在模拟器上重现它。该应用程序还可以在其他三星 S6 设备上运行。
我还使用https://www.sslshopper.com/ssl-checker.html#hostname=prod.mapdot.net验证了 ssl 证书
这是引发异常的代码:
static Future<String> mapDotSignIn(String usr, String pass) async {
final url = ApiHelper.RootUrl + "Login/Login";
try {
Map<String, dynamic> json = new Map<String, dynamic>();
json['user'] = usr;
json['pass'] = pass;
var jsonStr =jsonEncode(json);
var resp = await http.post(url,
headers: {"Content-Type": "application/json"}, body: jsonStr);
Map<String, dynamic> respMap = jsonDecode(resp.body);
return respMap['token'];
} catch (e) {
return 'Error: ' + e.toString();
}
}
我正在考虑将 ..badCertificateCallback 添加到通话中,但除非没有其他方法,否则我宁愿避免这种情况。有什么想法可能导致这种情况吗?
解决方案
推荐阅读
- javascript - 使用Javascript删除div内的文本
- azure-devops - AzureDevops:如何在查询中维护 sprint 顺序?
- python - 如何将项目是字典转换为熊猫数据框中的新列?
- c# - 使用 Piranha CMS 重置密码
- spring-boot - 在 Spring Boot 中自定义 spring-data-jpa 基础存储库
- javascript - 从网站获取 NaN 和 aN 返回值而不是剩余时间
- javascript - 如何设置谷歌地图的中心和缩放以覆盖从 Wordpress 数据库生成的所有标记
- php - 如何在 PHP MYSQL 中制作和显示通知
- json - 我希望 Grafana 计算成功与失败 HTTP 响应的比率,并将这两个指标绘制在一个图表中。我怎样才能做到这一点?
- r - 尽管使用了逗号,但删除带有 complete.cases、未定义列错误的 NA