Wie verbinde ich die CN in einem SSL-Zertifikat von pyOpenSSL verify_cb mit einem generierten Socket

Ich bin ein wenig neu bei pyOpenSSL. Ich versuche herauszufinden, wie das generierte Socket einem SSL-Zertifikat zugeordnet werden kann. verify_cb wird aufgerufen, die mir Zugriff auf das Cert und einen Conn gibt, aber wie verknüpfe ich diese Dinge, wenn dies geschieht:

cli, addr = selbst.server.accept ()

0
hinzugefügt
Ansichten: 2
Möchten Sie die Antwort akzeptieren? :)
hinzugefügt der Autor Jean-Paul Calderone, Quelle

1 Antworten

Nachdem der Handshake abgeschlossen ist, können Sie das Clientzertifikat abrufen. Während das Client-Zertifikat auch im Bestätigungs-Callback (verify_cb) verfügbar ist, gibt es keinen Grund, etwas zu versuchen, abgesehen von der Überprüfung des Zertifikats in diesem Callback. Das Einrichten eines anwendungsspezifischen Mappings erfolgt besser nach erfolgreichem Handshake. Ziehen Sie in Betracht, die von der Methode accept zurückgegebene OpenSSL.SSL.Connection-Instanz zu verwenden, um das Zertifikat (und von dort den commonName) abzurufen und es an dieser Stelle dem Verbindungsobjekt zuzuordnen. Beispielsweise,

client, clientAddress = self.server.accept()
client.do_handshake()
commonNamesToConnections[client.get_peer_certificate().commonName] = client

Sie sollten das Mapping überprüfen, um sicherzustellen, dass Sie keine bestehende Verbindung überschreiben (möglicherweise mithilfe einer Liste von Verbindungen, anstatt nur jeden gebräuchlichen Namen einem zuzuordnen). Und natürlich müssen Sie Einträge entfernen, wenn Verbindungen verloren gehen.

Der `do_handshake'-Aufruf zwingt den Handshake, tatsächlich zu geschehen. Andernfalls erfolgt der Handshake, wenn Anwendungsdaten zuerst über die Verbindung übertragen werden. Das ist in Ordnung, aber es würde die Einrichtung dieser Zuordnung etwas komplizierter machen.

0
hinzugefügt