1

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))

印刷結果は (なし)

4

1 に答える 1

1

これが接続用にネゴシエートされた暗号であるため、結果は None になります。むしろ、接続用の暗号がまだネゴシエートされていないため、None です。暗号の選択はハンドシェイクの一部であり、この例ではハンドシェイクはどこでも行われません。

con.do_handshake()に電話する前に試してくださいSSL_get_current_cipher

また、_プレフィックス付きの名前は非公開であり、プログラムが pyOpenSSL の将来のバージョンで動作し続けるようにする場合は、実際に使用しないでください。

于 2014-06-02T14:27:48.203 に答える