V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Strikeactor
V2EX  ›  Python

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

  •  
  •   Strikeactor · 2016-02-06 23:19:08 +08:00 · 3046 次点击
    这是一个创建于 3245 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    2 条回复    2016-02-07 09:03:38 +08:00
    neilp
        1
    neilp  
       2016-02-06 23:37:24 +08:00   ❤️ 1
    >> ,第三个随机数产生之后客户端会用服务器证书中的公匙对它进行加密,这个加密是用的什么加密方法?


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

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

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

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

    通信一段时间后, 双方可能会进行对称秘钥的重协商.
    mengzhuo
        2
    mengzhuo  
       2016-02-07 09:03:38 +08:00 via iPhone
    楼主属于想太多做太少
    Python 用的就是 openssl
    调整都可以在 openssl 库里做
    而且极大可能你调完以后会发现自己写的不如别人写的
    ps 如果只是想调 cipher ,可以调环境变量
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2978 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:33 · PVG 08:33 · LAX 16:33 · JFK 19:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.