Aplicación de cliente habilitada para SSL con OpenSSL, ¿verificación del servidor?

3

Estoy escribiendo una aplicación de cliente habilitada para OpenSSL SSL que se conecta a un servidor de Google. Tengo el SSL funcionando y puedo monitorear el tráfico y ver que está definitivamente encriptado. Estoy usando la función de API OpenSSL SSL_CTX_load_verify_locations para cargar un archivo .pem que contiene certificados de raíz públicos para verificar que el servidor es un servidor confiable ... ¡¿Creo ??

He hecho CARGAS de búsqueda pero no puedo encontrar una descripción simple de lo que debo hacer para asegurarme de que estoy hablando con un servidor de Google. ¿Es correcto hacer un archivo .pem con CA raíz? ¿Cómo sé que estoy hablando con Google y no con alguien más en la lista de confianza?

Además, ¿debo distribuir el archivo .pem junto con la aplicación, o puedo compilarlo en mi aplicación?

Cualquier ayuda muy apreciada.

    
pregunta LongTom 26.05.2014 - 00:08
fuente

2 respuestas

1

La forma en que verifica si un certificado es válido es verificando los parámetros del certificado (vencimiento, asunto, etc.) y verificando que el certificado fue firmado por una autoridad confiable.

En cuanto a la autoridad para confiar en los certificados de Google, Google publica un documento de preguntas frecuentes aquí . Si sigues sus pautas, estarás bien.

    
respondido por el tylerl 26.05.2014 - 04:21
fuente
1

Primero, debe preguntarse si confía en todos los 100 de CA que son de confianza para el navegador, cada uno de los cuales puede firmar un certificado para Google y cada uno puede crear sub-CA que nuevamente tienen las mismas posibilidades, etc. Si cree que este proceso es guardar los incidentes con Comodo y DigiNotar en 2011.

Si desea ser mejor, realice la fijación de certificados, por ejemplo, guarde una huella dactilar del certificado en sí o de su clave pública y asegúrese de que esto es lo que obtiene cuando se conecta al servidor.

Y, por supuesto, debe hacer la verificación correcta del certificado, por ejemplo:

  • vida útil (not_after, not_before)
  • ruta verificada a una CA raíz de confianza
  • verifique la revocación del certificado y todas las sub-CA dentro de la ruta a la CA raíz, ya sea con las CRL actuales o con OCSP, y no solo ignore los errores de OCSP. OpenSSL puede hacer esto para CRL si descarga la CRL usted mismo y puede ayudarlo con OCSP aunque no hay una API documentada
  • y no olvide verificar el nombre de host con la sección CN o SAN de acuerdo con RFC2818 y RFC6125. No hay soporte con las versiones OpenSSL lanzadas actualmente para esto, por lo que debe hacerlo a mano y no cometer los mismos errores que muchos otros (como permitir múltiples comodines o comodines no solo en la etiqueta de la izquierda)
respondido por el Steffen Ullrich 26.05.2014 - 07:00
fuente

Lea otras preguntas en las etiquetas