Comment associer le cn dans un cert ssl de pyOpenSSL verify_cb à un socket généré

Je suis un peu nouveau pour pyOpenSSL. J'essaie de comprendre comment associer le socket généré à un cert ssl. verify_cb est appelé qui me donne accès au cert et à un conn mais comment associer ces choses quand cela arrive:

cli, addr = self.server.accept ()

0
Voulez-vous accepter la réponse? :)
ajouté l'auteur Jean-Paul Calderone, source

1 Réponses

Une fois la négociation terminée, vous pouvez obtenir le certificat client. Bien que le certificat client soit également disponible dans le callback de vérification (verify_cb), il n'y a pas vraiment de raison d'essayer de faire autre chose que de vérifier le certificat dans ce rappel. Il est préférable de configurer un mappage spécifique à l'application une fois que l'établissement de la liaison s'est déroulé avec succès. Par conséquent, pensez à utiliser l'instance OpenSSL.SSL.Connection renvoyée par la méthode accept pour obtenir le certificat (et à partir de là, le commonName) et l'associer à l'objet de connexion à ce stade. Par exemple,

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

Vous pouvez vérifier le mappage pour vous assurer que vous n'écrasez aucune connexion existante (en utilisant éventuellement une liste de connexions au lieu de simplement associer chaque nom commun à un seul). Et bien sûr, vous devez supprimer les entrées lorsque les connexions sont perdues.

L'appel `do_handshake 'force la poignée de main à arriver. Sans cela, la prise de contact se produira lorsque les données de l'application sont d'abord transférées sur la connexion. C'est bien, mais cela rendrait la mise en place de cette cartographie un peu plus compliquée.

0
ajouté