客户端中的Flutter HTTPS握手错误(操作系统错误:CERTIFICATE_VERIFY_FAILED:确定(handshake.cc:363))

时间:2019-02-28 14:36:35

标签: ios android-studio https flutter

一个同事给我一个Flutter项目,尝试在iOS中构建应用程序(我使用Mac,我们都使用Android Studio)。一切正常,除了以下错误:

Handshake error in client (OS Error: CERTIFICATE_VERIFY_FAILED: ok(handshake.cc:363))

如果我使用HTTP而不是HTTPS,则可以正常工作。我的同事说他通过添加以下代码来解决:

client.badCertificateCallback = (X509Certificate cert, String host, int port) => true;

这行代码也位于我的项目中,因为源是相同的。那么,为什么在Android上却不能使用它呢?

4 个答案:

答案 0 :(得分:8)

所有http上ssl认证问题的最佳方法 请求

在两个平台(android和ios)上均可使用

class MyHttpOverrides extends HttpOverrides{
  @override
  HttpClient createHttpClient(SecurityContext context){
    return super.createHttpClient(context)
      ..badCertificateCallback = (X509Certificate cert, String host, int port)=> true;
  }
}

void main(){
    HttpOverrides.global = new MyHttpOverrides();
    runApp(new MyApp());
}

答案 1 :(得分:1)

老问题,但我的解决方法是确保在客户端上正确设置时间/日期

答案 2 :(得分:0)

检查您使用的https证书,我认为iOS进行https连接时比android采取更严格的措施。为了安全起见,请尝试更新服务器证书。

答案 3 :(得分:0)

如果您已添加此行,则此操作应在ios上有效

client.badCertificateCallback = (X509Certificate cert, String host, int port) 
=> true;

因此,请仔细检查您是否为请求使用了相同的客户端实例,并且在设置badCertificateCallback参数之后是否正在发出请求