Я пишу приложение, для которого требуется установить сертификат в браузере клиента.Я нашел это в документации 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.
IЯ говорю объекту 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, пожалуйста, не будь слишком грубым!
Спасибо:)
Роджер