安全的websocket交换

时间:2014-03-23 21:42:21

标签: websocket dart

我在互联网上寻找这个帖子。如果我理解,使用https或wss,需要SSl证书吗?这些方法可以保证数据交换吗?

我读了一篇关于RSA的文件。它看起来很好,而且很安全。但是,我如何实现这些?我找到了一个名为" cipher"的酒吧包。好吗?

实际上我的代码在服务器端看起来像这样:

import 'dart:io';
import 'dart:async';

ft_handle_error(error) => print("The are on error $error");

handle_msg(String msg) => print("Message received : $msg");

void    ft_server_html(HttpRequest request)
{
    if (request.uri.path == '/')
    {
        request.response.statusCode = HttpStatus.ACCEPTED;
        request.response.headers.contentType = new ContentType('text', 'plain');
        request.response.write('Hello toi !');
    }
    else
        request.response.statusCode = HttpStatus.BAD_REQUEST;
    request.response.close();
}

void    ft_ws_server(HttpRequest request)
{
    if (request.uri.path == '/ws')
    {
        WebSocketTransformer.upgrade(request)
        .then((socket)
        {
            socket.listen(handle_msg);
            socket.add("Recu");
        })
        .whenComplete(request.response.close);
    }
    else
        request.response.close();
}

void    main()
{
    HttpServer.bind('127.0.0.1', 8080)
    .then((server) => server.listen(ft_server_html))
    .catchError(ft_handle_error);
    HttpServer.bind('127.0.0.1', 4040)
    .then((ws_server) => ws_server.listen(ft_ws_server))
    .catchError(ft_handle_error);
}

和客户端

import 'dart:html';

void    main()
{
    WebSocket wss;

    wss = new WebSocket('ws://127.0.0.1:4040/ws');
    wss.onOpen.listen((_) => wss.send("From browser"));
    wss.onMessage.listen((msg) => print("Msg received : ${msg.data}"));
}

它运作良好,但我认为它不够安全。 再次感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可以创建自签名证书:https://devcenter.heroku.com/articles/ssl-certificate-self

使用它,数据将受到保护,免受偷窥者的侵害。除非有人窃取你的私钥,否则那个小偷可以解密通信。

但是,由于证书没有由有效的CA签署,因此您的客户无法确定是否在他认为的地方进行连接,正如@SLaKs指出的那样引发MITM攻击。也就是说,有人可以坐在您的客户和服务器之间,然后阅读所有内容。

因此,如果您的客户一旦意识到这一点,就不想支付证书,并且热衷于接受浏览器每次连接时都会发出有关CA签名的警告,您可以使用自签名之一。

相关问题