pomelo握手加密分享

出于安全性考虑,在handshake过程中,对传输数据(就是{"code":200,"sys":{"heartbeat":30,"dict":...这一串)进行了加密,当然也可以同理对于其他包也这么干~(不这么干的话,API接口和protobuf序列化格式用wireshark一抓就明文看到了)

具体代码暂时不贴了,提一下思路和修改的位置~(期待看下官方的思路是怎么做的)

对框架修改:在lib/connectors/commands/handshake.js文件中,修改var response = function(socket, sys, resp)函数,把JSON.stringify(res)内容使用node自带的crypto加密一下,然后把buffer传回去

对libpomelo修改:src/pkg-handshake.c中的int pc__handshake_resp函数,对参数const char *data解密,之后的流程都一样

如果要对所有通信加密解密的话,在encode和decode之下套一层encrypto和decrypto就行(因为需要兼顾strencode和pbencode)

http://nodejs.netease.com/topic/5309bc81d7cfa4bd3d6b8177 帖子回复中提到了用AES,我基本是参考这个;但是其实用不着hex序列化(因为这样基本是翻倍数据流量),可以直接发二进制就行了~

个人不是很倾向于SSL加密,觉得有点笨重了……

标签: pomelo libpomelo
qklxtlx 在 2014-6-16 10:45发布 分享到 weibo
3 回复
#1 w3hacker 2014-6-16 11:27 回复

前排

#2 ctbinzi 2014-12-26 13:22 回复

挺好,赞~\(≧▽≦)/~

#3 wangxy 2014-12-26 21:29 回复

SSL其实并不笨重, 一般情况下,除了第一次SSL握手的时候,会是一次全握手,会有比较多的报文交换, 以后的所有握手基本上都会复用session, 不会有很大开销.

至于传输加密, SSL协议的传输时加密用的也是对称加密,AES, RC4,3DES之类的, 跟自己手动使用AES之类的加密相比, 计算量上并没有太多差别, 可能还会有更好的优化.

另外SSL/TLS是标准的协议, 协议设计层面还是经得起考验的. 但是一般自己手动实现的加密协议, 都会有各种各样的漏洞.

当考虑了足够多的被攻击情况后,会发现自己实现的就是一个山寨版的类ssl协议.

当然,如果是仅仅不想明文传输, 简单地做一个混淆就ok了. 自己实现一个对称加密,好像也没有什么不妥,不过安全地交换密钥倒是个问题

回到顶部