首页 > 解决方案 > 使用有效证书调用后端 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 添加到通话中,但除非没有其他方法,否则我宁愿避免这种情况。有什么想法可能导致这种情况吗?

标签: androidsslflutterssl-certificate

解决方案


推荐阅读