如何从Python进入SSL / TLS内部?

时间:2011-07-11 06:47:32

标签: python ssl

我正在Python(2.7和3.2)中实现XMPP协议,我发现一个重要的事情阻止我使实现完全兼容。

当前规范(RFC 6120)要求实现SCRAM-SHA-1-PLUS SASL机制(RFC 5802),而这又需要'tls-unique'通道绑定({ {3}}),定义为:

  

描述:发送的第一个TLS完成消息(注意:已完成   结构,而不是包含它的TLS记录层消息)   最近TLS连接的TLS握手被绑定到

Python似乎没有直接提供这条信息,但我知道它可以通过Python内部使用的OpenSSL API获得。

有没有办法获得SSL套接字包装器的'SSL'指针,所以我可以通过ctypes模块或我自己的扩展模块使用它?我用Python安装的头文件找不到类似的内容。

是否有任何用于Python的第三方TLS模块提供此类API,但是保留了一般的Python SSL API?

或者是唯一的方法,从Python中提取SSL代码并使用我自己的包捆绑它的修补副本?

更新:我已为此功能创建了一项Python功能请求:RFC 5929 不过,我仍在寻找“随时可用”的解决方案。

2 个答案:

答案 0 :(得分:12)

从Python SSLSocket获取数据似乎最简单的方法是修复标准Python库。所以我做到了,补丁将包含在Python 3.3中。

http://bugs.python.org/issue12551#msg140450

答案 1 :(得分:0)

这有望为您节省一些时间。

Python SASL资源:

  1. Suelta pure-python SASL库(可能是你最好的选择)
  2. python-ldap's SASL implementation
  3. Apache qpidc's SASL wrapper围绕其分区的Cyrus-SASL代码。
  4. python-cyrus看起来是一个相当强大的Cyrus-SASL包装器