Como associar o cn em um certificado ssl de pyOpenSSL verify_cb a um soquete gerado

Eu sou um pouco novo para pyOpenSSL. Eu estou tentando descobrir como associar o soquete gerado para um certificado ssl. verify_cb é chamado, o que me dá acesso ao cert e a conn, mas como associo essas coisas quando isso acontece:

cli, addr = self.server.accept ()

0
adicionado
Visualizações: 1
Você gostaria de aceitar a resposta? :)
adicionado o autor Jean-Paul Calderone, fonte

1 Respostas

Depois que o handshake estiver concluído, você poderá obter o certificado do cliente. Embora o certificado de cliente também esteja disponível no retorno de chamada de verificação (verify_cb), não há realmente nenhum motivo para tentar fazer nada além de verificar o certificado nesse retorno de chamada. A configuração de um mapeamento específico do aplicativo é melhor realizada depois que o handshake for concluído com sucesso. Portanto, considere o uso da instância OpenSSL.SSL.Connection retornada pelo método accept para obter o certificado (e, a partir dele, o commonName) e associá-lo ao objeto de conexão nesse ponto. Por exemplo,

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

Você pode querer verificar o mapeamento para ter certeza de que não está sobrescrevendo nenhuma conexão existente (talvez usando uma lista de conexões em vez de apenas mapear cada nome comum para um). E, claro, você precisa remover entradas quando as conexões são perdidas.

O chamado 'do_handshake' força o aperto de mão a acontecer. Sem isso, o handshake ocorrerá quando os dados da aplicação forem transferidos pela primeira vez pela conexão. Tudo bem, mas isso tornaria a configuração desse mapeamento um pouco mais complicada.

0
adicionado