Python 的 SSL 库能把 handshake 细化到可控吗

2016-02-06 23:19:08 +08:00
 Strikeactor

我只找到了 SSLSocket.do_handshake()这么一个函数,把整个握手过程全部封装进去了。
有更细化的函数可以用吗?比如指定随机数以及支持的加密方法来构造 client hello ,把 handshake 拆成更加细分的四次通信以达到流程可控。

顺便问问,第三个随机数产生之后客户端会用服务器证书中的公匙对它进行加密,这个加密是用的什么加密方法?如果想要自己构造这样一个请求的话,有没有轮子可以参考一下的。。
。。如果是 openSSL 的源代码就算了

3047 次点击
所在节点    Python
2 条回复
neilp
2016-02-06 23:37:24 +08:00
>> ,第三个随机数产生之后客户端会用服务器证书中的公匙对它进行加密,这个加密是用的什么加密方法?


这个要看情况, 不一定是用 服务器的公钥加密.

先要看协商出来的 "秘钥交换算法", 现在绝大多数都使用的是 DHE 交换算法. 试用 DHE 交换对称秘钥. 这样, 客户端就不需要用公钥加密. 只是用公钥吧最后一个报做签名.

当然也有 用 RSA(或者 ECDSA) 作为 "秘钥交换算法"的, 此时服务端的证书必须是 RSA 证书或者 ECDSA, 不能是 DSA 证书. 因为 DSA 算法不能用来加密. 此时, 客户端就需要把 对称秘钥 用 RSA 加密发给 服务端. 然后服务端和客户端就拥有相同的对称秘钥了.

从此以后, 双方就可以是用对称加密算法来传输了. 一般是 AES,3des. 这在前面也会协商对称加密算法.

通信一段时间后, 双方可能会进行对称秘钥的重协商.
mengzhuo
2016-02-07 09:03:38 +08:00
楼主属于想太多做太少
Python 用的就是 openssl
调整都可以在 openssl 库里做
而且极大可能你调完以后会发现自己写的不如别人写的
ps 如果只是想调 cipher ,可以调环境变量

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/255705

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX