簡體   English   中英

Flutter Websocket 客戶端 ssl 握手失敗

[英]Flutter Websocket client ssl handshake failure

服務器工作正常,用回顯客戶端測試。

當我運行我的應用程序時:

 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,但沒有成功。

對解決我的問題的任何回應將不勝感激!

好的,我一周前修復了它,忘記發布答案。 這更像是一種解決方法,但它仍然很穩定......我使用了一個 apache2 網絡服務器,它使用 websocket 服務器的反向代理。 現在 apache 服務器已准備好證書,我在 openssl 上使用 s_client 檢查瀏覽器/客戶端是否接受證書,它在我使用 apache2 作為反向代理之后確實如此。

    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(MyApp());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM