Cómo asociar el cn en un cert de ssl de pyOpenSSL verify_cb a un socket generado

Soy un poco nuevo en pyOpenSSL. Estoy tratando de averiguar cómo asociar el socket generado a un certificado SSL. Se llama a verify_cb, que me da acceso al certificado y una conexión, pero ¿cómo puedo asociar esas cosas cuando esto sucede?

cli, addr = self.server.accept ()

0
agregado
Puntos de vista: 2
¿Te gustaría aceptar la respuesta? :)
agregado el autor Jean-Paul Calderone, fuente

1 Respuestas

Después de que se complete el intercambio de información, puede obtener el certificado del cliente. Si bien el certificado del cliente también está disponible en la devolución de llamada de verificación (verify_cb), en realidad no hay ninguna razón para intentar hacer nada aparte de verificar el certificado en esa devolución de llamada. La configuración de un mapeo específico de la aplicación se realiza mejor después de que el apretón de manos se haya realizado con éxito. Por lo tanto, considere usar la instancia OpenSSL.SSL.Connection devuelta por el método accept para obtener el certificado (y desde allí, el commonName) y asociarlo con el objeto de conexión en ese punto. Por ejemplo,

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

Es posible que desee comprobar la asignación para asegurarse de que no está sobrescribiendo ninguna conexión existente (tal vez utilizando una lista de conexiones en lugar de solo asignar cada nombre común a uno). Y, por supuesto, necesita eliminar entradas cuando se pierden las conexiones.

La llamada `do_handshake' fuerza el apretón de manos para que realmente suceda. Sin esto, el apretón de manos ocurrirá cuando los datos de la aplicación se transfieran por primera vez a través de la conexión. Está bien, pero haría que configurar este mapa sea un poco más complicado.

0
agregado