我只找到了 SSLSocket.do_handshake()这么一个函数,把整个握手过程全部封装进去了。
有更细化的函数可以用吗?比如指定随机数以及支持的加密方法来构造 client hello ,把 handshake 拆成更加细分的四次通信以达到流程可控。
顺便问问,第三个随机数产生之后客户端会用服务器证书中的公匙对它进行加密,这个加密是用的什么加密方法?如果想要自己构造这样一个请求的话,有没有轮子可以参考一下的。。
。。如果是 openSSL 的源代码就算了
1
neilp 2016-02-06 23:37:24 +08:00 1
>> ,第三个随机数产生之后客户端会用服务器证书中的公匙对它进行加密,这个加密是用的什么加密方法?
这个要看情况, 不一定是用 服务器的公钥加密. 先要看协商出来的 "秘钥交换算法", 现在绝大多数都使用的是 DHE 交换算法. 试用 DHE 交换对称秘钥. 这样, 客户端就不需要用公钥加密. 只是用公钥吧最后一个报做签名. 当然也有 用 RSA(或者 ECDSA) 作为 "秘钥交换算法"的, 此时服务端的证书必须是 RSA 证书或者 ECDSA, 不能是 DSA 证书. 因为 DSA 算法不能用来加密. 此时, 客户端就需要把 对称秘钥 用 RSA 加密发给 服务端. 然后服务端和客户端就拥有相同的对称秘钥了. 从此以后, 双方就可以是用对称加密算法来传输了. 一般是 AES,3des. 这在前面也会协商对称加密算法. 通信一段时间后, 双方可能会进行对称秘钥的重协商. |
2
mengzhuo 2016-02-07 09:03:38 +08:00 via iPhone
楼主属于想太多做太少
Python 用的就是 openssl 调整都可以在 openssl 库里做 而且极大可能你调完以后会发现自己写的不如别人写的 ps 如果只是想调 cipher ,可以调环境变量 |