私はpyOpenSSLに少し慣れていません。生成されたソケットをSSL証明書に関連付ける方法を理解しようとしています。verify_cbが呼び出され、証明書とconnにアクセスできるようになりますが、これが発生した場合、これらを関連付けるにはどうすればよいですか。
cli、addr = self.server.accept()
ハンドシェイクが完了すると、クライアント証明書を取得できます。クライアント証明書は検証コールバック(verify_cb)でも使用できますが、そのコールバックで証明書を検証する以外に何かをしようとする理由は実際にはありません。アプリケーション固有のマッピングの設定は、ハンドシェイクが完全に成功した後で行う方が適切です。したがって、acceptメソッドによって返されたOpenSSL.SSL.Connectionインスタンスを使用して証明書(およびそこからcommonName)を取得し、その時点で接続オブジェクトに関連付けることを検討してください。例えば、
client, clientAddress = self.server.accept()
client.do_handshake()
commonNamesToConnections[client.get_peer_certificate().commonName] = client
マッピングをチェックして、既存の接続を上書きしていないことを確認することをお勧めします(おそらく、各共通名を1つにマッピングするのではなく、接続のリストを使用します)。そしてもちろん、接続が失われたときにエントリを削除する必要があります。
`do_handshake´呼び出しは、ハンドシェイクを実際に発生させます。これがないと、アプリケーションデータが接続を介して最初に転送されるときにハンドシェイクが発生します。それは問題ありませんが、このマッピングの設定は少し複雑になります。