Sto scrivendo un'app che richiede l'installazione di un certificato nel browser client. Ho trovato questo nei documenti PyOpenSSL per l'oggetto "Contesto" ma non riesco a vedere nulla su come il callback dovrebbe convalidare il certificato, solo che dovrebbe, in qualche modo.Convalida dei certificati client in 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.
sto dicendo l'oggetto contesto in cui la mia (auto firmato) chiavi sono (vedi sotto) quindi credo che non capisco il motivo per cui questo non è sufficiente per la libreria per verificare se il CERT presentato dal cliente è valido Cosa si dovrebbe fare in questa funzione di callback?
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()
Caveat: Codifica per divertimento qui, def non un professionista, quindi se la mia Q rivela la mia zoppia totale, ingenuità e/o fondamentale mancanza di comprensione quando si tratta di SSL per favore non essere troppo ruvida!
Grazie :)
Roger