客户端中的 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))的主要内容,如果未能解决你的问题,请参考以下文章
Opera 12 中的 WebSocket 握手失败(错误请求)
当我尝试从 Mysql 中获取数据时出现此问题 客户端中的握手错误(OS ErrorWRONG_VERSION_NUMBER(tls_record.cc:242)