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

Posted

技术标签:

【中文标题】客户端中的 Flutter HTTPS 握手错误(操作系统错误:CERTIFICATE_VERIFY_FAILED:ok(handshake.cc:363))【英文标题】:Flutter HTTPS Handshake error in client (OS Error: CERTIFICATE_VERIFY_FAILED: ok(handshake.cc:363)) 【发布时间】:2019-07-22 12:13:36 【问题描述】:

一位同事给了我一个 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 上运行,而不能在 iOS 上运行呢?

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

如果你添加了这一行,这应该可以在 ios 上运行

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

所以请仔细检查您是否使用相同的客户端实例来处理您的请求,以及您是否在设置 badCertificateCallback 参数后发出请求

【讨论】:

【参考方案3】:

所有 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());

【讨论】:

不是安全故障吗?【参考方案4】:

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

【讨论】:

以上是关于客户端中的 Flutter HTTPS 握手错误(操作系统错误:CERTIFICATE_VERIFY_FAILED:ok(handshake.cc:363))的主要内容,如果未能解决你的问题,请参考以下文章

Web服务中的握手错误

Opera 12 中的 WebSocket 握手失败(错误请求)

当我尝试从 Mysql 中获取数据时出现此问题 客户端中的握手错误(OS ErrorWRONG_VERSION_NUMBER(tls_record.cc:242)

grpc++ 中的 SSL 握手错误 (CERTIFICATE_VERIFY_FAILED)

android中的SSL握手失败

https 三次握手