我在互联网上寻找这个帖子。如果我理解,使用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}"));
}
它运作良好,但我认为它不够安全。 再次感谢您的帮助。
答案 0 :(得分:1)
您可以创建自签名证书:https://devcenter.heroku.com/articles/ssl-certificate-self
使用它,数据将受到保护,免受偷窥者的侵害。除非有人窃取你的私钥,否则那个小偷可以解密通信。
但是,由于证书没有由有效的CA签署,因此您的客户无法确定是否在他认为的地方进行连接,正如@SLaKs指出的那样引发MITM攻击。也就是说,有人可以坐在您的客户和服务器之间,然后阅读所有内容。
因此,如果您的客户一旦意识到这一点,就不想支付证书,并且热衷于接受浏览器每次连接时都会发出有关CA签名的警告,您可以使用自签名之一。