如何获取DTO的pyOpenSSL中的当前密码

时间:2014-05-10 16:23:05

标签: python openssl handshake pyopenssl dtls

我需要在pyOpenSSL中获得DTLS协议的协商密码。我成功地为TCP套接字做了这个,但是当谈到数据报时,它并不那么明显。请以C或Python提供示例。这是我到目前为止所尝试的:

import socket
from OpenSSL import SSL
from OpenSSL._util import (
    ffi as _ffi,
    lib as _lib)


DTLSv1_METHOD = 7
SSL.Context._methods[DTLSv1_METHOD]=getattr(_lib, "DTLSv1_client_method")
ctx = SSL.Context(DTLSv1_METHOD)
ctx.set_cipher_list('AES128-SHA')
ctx.use_certificate_file("path-to-cert.pem")
ctx.use_privatekey_file("path-to-key.pem")
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('dtls-host', 443))
con = SSL.Connection(ctx, s)
con.set_connect_state()
con.connect(('dtls-host', 443))
cc = _lib.SSL_get_current_cipher(con._ssl)
print _ffi.string( _lib.SSL_CIPHER_get_name(cc))

打印结果是     (无)

1 个答案:

答案 0 :(得分:1)

结果为None,因为这是为您的连接协商的密码。或者更确切地说,它是None,因为尚未为您的连接协商 no 密码。密码选择是握手的一部分,在此示例中,握手不会在任何地方完成。

在致电con.do_handshake()之前尝试SSL_get_current_cipher

另请注意,_ - 前缀名称是私有的,如果您希望程序继续使用未来版本的pyOpenSSL,则不应使用它们。