После того, как рукопожатие завершено, вы можете получить сертификат клиента. Хотя сертификат клиента также доступен в обратном вызове проверки (verify_cb), на самом деле нет никаких причин пытаться что-либо делать, кроме проверки сертификата в этом обратном вызове. Настроить сопоставление для конкретного приложения лучше после успешного завершения рукопожатия. Итак, рассмотрите возможность использования экземпляра OpenSSL.SSL.Connection, возвращаемого методом accept, для получения сертификата (и оттуда commonName) и связывания его с объектом подключения в этой точке. Например,
client, clientAddress = self.server.accept()
client.do_handshake()
commonNamesToConnections[client.get_peer_certificate().commonName] = client
Возможно, вы захотите проверить сопоставление, чтобы убедиться, что вы не перезаписываете любое существующее соединение (возможно, используя список соединений вместо простого сопоставления каждого общего имени с одним). И, конечно, вам нужно удалить записи, когда соединения потеряны.
Вызов do_handshake заставляет рукопожатие действительно произойти. Без этого рукопожатие произойдет при первой передаче данных приложения через соединение. Это нормально, но это немного усложнит настройку этого отображения.