【发布时间】:2020-07-17 13:05:03
【问题描述】:
服务器工作正常,用 echo 客户端测试。
当我使用以下方式运行我的应用程序时,仍然可以:
final channel = IOWebSocketChannel.connect("wss://hostname:port");
channel.sink.add('test');
channel.stream.listen((message) {
debugPrint(message);
channel.sink.close(status.goingAway);
带有此重复消息的调试控制台异常:
E/flutter (19705): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: WebSocketChannelException: WebSocketChannelException: HandshakeException: Handshake error in client (OS Error:
E/flutter (19705): CERTIFICATE_VERIFY_FAILED: unable to get local issuer certificate(handshake.cc:354))
我尝试了多种方式让我的 Flutter 应用信任 Let`s Encrypt CA,但均未成功。
对解决我的问题的任何回应将不胜感激!
【问题讨论】:
-
我的猜测是该站点设置不正确,即证书错误或缺少中间证书。并且回显客户端可能会简单地忽略这些问题(浏览器通常会解决缺少中间证书的问题,而其他人则不会)。如果您愿意提供实际的主机名和端口,并且可能能够提供更多详细信息,但您也可以尝试与SSLLabs 核对 - 但请确保使用与目标相同的端口。
-
根据 SSLLabs:只有我的 DNS CAA 不完整,它也只使用 TLS 1.2
-
DNS CAA 和 TLS 1.2 仅与证书验证无关。
-
那我知道怎么了,这很令人沮丧,我必须进行加密通信。奇怪的是,有时客户端正在与服务器建立 ssl 握手,但大多数时候,都会显示异常。
-
引用我自己的话:“如果您愿意提供实际的主机名和端口,并且可能能够提供更多详细信息......”。没有这些细节,就不可能说出哪里出了问题。如果它有时但并不总是有效,那么这些场景中的区别是什么会很有趣。不同的网络?