我需要在 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))
打印的结果是
(没有任何)
结果为“无”,因为这是为您的连接协商的密码。或者更确切地说,它是“无”,因为no已经为您的连接协商了密码。密码选择是握手的一部分,并且在本示例中任何地方都没有进行握手。
Try con.do_handshake()
打电话之前SSL_get_current_cipher
.
还要记住_
- 前缀名称是私有的,如果您希望您的程序继续与未来版本的 pyOpenSSL 一起工作,您确实不应该使用它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)