Проверка клиентских сертификатов в PyOpenSSL

Я пишу приложение, которое требует, чтобы сертификат был установлен в клиентском браузере. . Я нашел это в документации PyOpenSSL для объекта «Контекст», но я не вижу ничего о том, как обратный вызов должен проверять сертификат, только то, что он должен каким-то образом.

   set_verify(mode, callback)
      Set the verification flags for this Context object to mode and
      specify that callback should be used for verification callbacks.
      mode should be one of VERIFY_NONE and VERIFY_PEER. If
      VERIFY_PEER is used, mode can be OR:ed with
      VERIFY_FAIL_IF_NO_PEER_CERT and VERIFY_CLIENT_ONCE to further
      control the behaviour. callback should take five arguments: A
      Connection object, an X509 object, and three integer variables,
      which are in turn potential error number, error depth and return
      code. callback should return true if verification passes and
      false otherwise.

Я сообщаю объекту Context, где находятся мои (самоподписанные) ключи (см. Ниже), поэтому я не понимаю, почему этого недостаточно для библиотеки, чтобы проверить, является ли сертификат, представленный клиентом, действительным. . Что нужно делать с этой функцией обратного вызова?

class SecureAJAXServer(PlainAJAXServer):
    def __init__(self, server_address, HandlerClass):
        BaseServer.__init__(self, server_address, HandlerClass)
        ctx = SSL.Context(SSL.SSLv23_METHOD)
        ctx.use_privatekey_file ('keys/server.key')
        ctx.use_certificate_file('keys/server.crt')
        ctx.set_session_id("My_experimental_AJAX_Server")
        ctx.set_verify( SSL.VERIFY_PEER | SSL.VERIFY_FAIL_IF_NO_PEER_CERT | SSL.VERIFY_CLIENT_ONCE, callback_func )
        self.socket = SSL.Connection(ctx, socket.socket(self.address_family, self.socket_type))
        self.server_bind()
        self.server_activate()

Предостережение: здесь пишем для удовольствия, определенно не профессионал, поэтому, если мой Q показывает мою полную хромоту, наивность и / или фундаментальное непонимание, когда дело доходит до SSL, пожалуйста, не будьте слишком грубо!

Спасибо :)

Роджер

16
задан aculich 2 February 2012 в 03:20
поделиться