Après la poignée de main est terminée, vous peut 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 la mise en correspondance pour vous assurer que vous n'êtes pas une connexion existante écraser (peut-être à l'aide d'une liste de connexions au lieu d'un mappage de chaque nom commun à un). Et bien sûr, vous devez supprimer les entrées lorsque les connexions sont perdues.
L'appel `do_handshake 'force l'établissement de la liaison à se produire. 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.
Voulez-vous accepter la réponse? :) –