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

Gab*_*one 9 ssl https ios android-studio flutter

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

Handshake error in client (OS Error: CERTIFICATE_VERIFY_FAILED: ok(handshake.cc:363))
Run Code Online (Sandbox Code Playgroud)

如果我使用 HTTP 而不是 HTTPS,它显然有效。我的同事说他通过添加这行代码解决了:

client.badCertificateCallback = (X509Certificate cert, String host, int port) => true;
Run Code Online (Sandbox Code Playgroud)

这行代码也在我的项目中,因为源码是一样的。那么为什么它适用于 Android 而不适用于 iOS?

Kia*_*iax 13

针对所有 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());
}
Run Code Online (Sandbox Code Playgroud)

  • 这不是安全失败吗? (7认同)
  • 对于那些面临需要覆盖的问题的人,只需使用“(SecurityContext? context)”而不是“(SecurityContext context)” (3认同)

Vin*_*owe 12

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


Sam*_*ani -4

检查您正在使用的 https 证书,我认为 iOS 在 https 连接方面比 Android 有更严格的措施。为了安全起见,请尝试更新您的服务器证书。