Ich schreibe eine App, die erfordert, dass ein Zertifikat im Browser des Clients installiert wird. Ich habe dies in der PyOpenSSL-Dokumentation für das "Context"-Objekt gefunden, aber ich kann nichts darüber finden, wie der Callback das Zertifikat validieren soll, nur dass es irgendwie sollte.
set\_verify(mode, callback)
Legt die Überprüfungsflags für dieses Context-Objekt auf den Modus fest und
gibt an, dass der Callback für Überprüfungsrückrufe verwendet werden soll.
Modus sollte einer von VERIFY\_NONE und VERIFY\_PEER sein. Wenn
VERIFY\_PEER verwendet wird, kann der Modus mit
VERIFY\_FAIL\_IF\_NO\_PEER\_CERT und VERIFY\_CLIENT\_ONCE kombiniert werden, um das Verhalten weiter zu steuern. Der Callback sollte fünf Argumente enthalten: Ein
Verbindungsobjekt, ein X509-Objekt und drei Ganzzahlvariablen,
die wiederum potenzielle Fehlernummer, Fehler Tiefe und Rückgabecode sind. Der Callback sollte true zurückgeben, wenn die Überprüfung erfolgreich ist, und
andernfalls false.
Ich sage dem Context-Objekt, wo meine (selbstsignierten) Schlüssel sind (siehe unten), daher verstehe ich nicht, warum das nicht ausreicht, damit die Bibliothek überprüft, ob das vom Client vorgelegte Zertifikat gültig ist. Was muss man in dieser Callback-Funktion tun?
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("Mein_experimenteller_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()
Hinweis: Ich programmiere hier aus Spaß, bin definitiv kein Profi, daher bitte sei nicht zu hart, wenn meine Frage meine totale Ahnungslosigkeit, Naivität und/oder grundlegendes Verständnis für SSL offenbart!
Danke :)
Roger