[英]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.