使用Flutter的自签名证书的SSL IOWebSocketChannel

时间:2018-07-27 17:17:27

标签: ssl websocket dart flutter

任何人都可以通过自签名证书帮助我通过此示例。我需要允许我的用户接受他们使用的自签名证书。

我正在使用以下示例:https://flutter.io/cookbook/networking/web-sockets/

如果ssl cert有效或未使用SSL,则一切正常。只是需要通过自我签名的驼峰

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final title = 'WebSocket Demo';
    Map headers = new Map<String,dynamic>();
    headers["XXXXXX"] = "XXXX";
    headers["XXXXXX"] = "13";
    headers["Origin"] = "XXXXXX";
    headers["Authorization"] = "XXXXXX";

    return MaterialApp(
      title: title,
      home: MyHomePage(
        title: title,
        channel: IOWebSocketChannel.connect('wss://10.1.1.154:443/rest/subscribe',headers: headers),
      ),
    );
  }
}

3 个答案:

答案 0 :(得分:1)

我认为您不会找到让许多websocket客户端接受自签名证书的方法,并且我看不到使用此特定库的方法。这并非完全是您问题的答案,但我想提一下,签名证书现在免费提供(https://letsencrypt.org/)。我不知道这是否适合您和/或您的用户。除此之外,我对语言不熟悉,因此我不会有太大帮助。但是,我无法相信您希望禁用证书的验证。确实,最好的解决方案似乎是避免使用自签名证书。

答案 1 :(得分:0)

要接受自签名证书,用户必须将其添加到其自己的受信任证书存储中-即进行明确的操作。

如果您使用“让我们加密”,请记住,一些非最新的盒子/安装必须先将“让我们加密CA”添加到受信任的存储中,然后才能验证您的证书-这也是一项明确的操作。

因此,在进行HTTPS / TLS / ...决策时,“加密”始终是一个不错的选择。

答案 2 :(得分:0)

这是一个很好的临时修复!它适用于带有自签名证书的本地 ip。 (请根据您的需要修改 badCertificateCallback

class MyHttpOverrides extends HttpOverrides {
  @override
  HttpClient createHttpClient(SecurityContext? context) {
    return super.createHttpClient(context)
      ..badCertificateCallback =
          (X509Certificate cert, String host, int port) => true; // add your localhost detection logic here if you want
  }
}

void main() {
  HttpOverrides.global = MyHttpOverrides();
  runApp(MaterialApp(home: MyApp()));
}