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