任何人都可以通过自签名证书帮助我通过此示例。我需要允许我的用户接受他们使用的自签名证书。
我正在使用以下示例: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),
),
);
}
}
答案 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()));
}