繁体   English   中英

如何在DTLS的pyOpenSSL中获取当前密码

[英]How to get current cipher in pyOpenSSL for 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))

打印结果为(无)

结果为“无”,因为这是为您的连接协商的密码。 或更确切地说,它是“无”,因为尚未为您的连接协商任何密码。 密码选择是握手的一部分,在此示例中,握手未在任何地方进行。

在调用SSL_get_current_cipher之前尝试con.do_handshake()

还要记住, _前缀的名称是私有的,如果您希望程序继续使用pyOpenSSL的未来版本,则不要使用它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM