pyOpenSSL: принудительное согласование SSL без отправки / получения?

#python #pyopenssl

#python #pyopenssl

Вопрос:

Возможно ли принудительно заставить pyOpenSSL выполнить согласование SSL (и, в частности, получить сертификат партнера) без попыток отправки / получения данных?

В настоящее время с помощью этого кода:

     ssl_soc = SSL.Connection(self._mk_ctx(), plain_soc)
    ssl_soc.set_connect_state()
    cert = ssl_soc.get_peer_certificate()
  

Вызов get_peer_certificate возвращается None , но после того, как я вызвал, например, ssl_soc.write("hello") , get_peer_certificate начинает возвращать сертификат, как я и ожидал.

Комментарии:

1. О боже! Я даже не мог понять, что он возвращается None только перед любой отправкой / получением. Оглядываясь назад, это должно было быть очевидно, поскольку я также использовал VERIFY_FAIL_IF_NO_PEER_CERT флаг, и это не привело к сбою. Понял только после просмотра этого вопроса.

Ответ №1:

Ошибка, очевидно, что мне нужно немного усложнить RTFM. Я искал do_handshake метод: http://packages.python.org/pyOpenSSL/openssl-connection.html