OpenVPN: certificado autofirmado en cadena

9

Estoy intentando utilizar sin éxito TunnelBlick(un cliente OS / X OpenVPN 2.2.1 que es conocido) para conectarse usando certificados. Aquí está el mensaje de error (desinfectado) que recibo:

2012-01-11 11:18:26 TLS: paquete inicial de **. **. **. **: 1194, sid = 17a4a801 5012e004
2012-01-11 11:18:26 VERIFICAR ERROR: profundidad = 1, error = certificado autofirmado en la cadena de certificados: / C = US / ST = ** / L = ** / O = ** / CN = ** / emailAddress = **
2012-01-11 11:18:26 TLS_ERROR: BIO read tls_read_plaintext error: error: 14090086: rutinas SSL: SSL3_GET_SERVER_CERTIFICATE: error de verificación del certificado
2012-01-11 11:18:26 Error de TLS: objeto de TLS -> error de lectura de texto sin formato entrante
2012-01-11 11:18:26 Error de TLS: error de apretón de manos de TLS
2012-01-11 11:18:26 TCP / UDP: Cierre de socket

Ahora, aquí está el problema. Yo mismo generé un CSR para solicitar este certificado, utilizando el archivo ca.crt que me proporcionó la otra parte (de hecho, lo hicieron dos veces solo para asegurarse).

Las entradas relevantes en la configuración del cliente son:

ca   ca.crt
cert my.crt
key  my.key

y, además ... puedo verificar las claves de esta manera:

openssl verificar -CAfile ca.crt my.crt 
my.crt: OK

Bien, ahora estoy completamente desconcertado y perplejo. En este punto, que la CSR y la clave se generaron utilizando la CSR adecuada. De hecho, aquí está el comando que lo hizo:

openssl req -newkey rsa:2048 -new -out my.csr -keyout my.key

También sabía hacer esto:

openssl x509 -subject -issuer -noout -in ca.crt

...

(¡parpadeo!)

¿Lo acabo de encontrar ?

El resultado de ese comando se ve así: (editado de alguna manera)

asunto = / C = US / ST = VA / L = ** / O = ** / CN = ** CA / emailAddress = **
emisor = (lo mismo)

mientras que en el mensaje de error de OpenVPN, el ST = no es exactamente el mismo:

VERIFICAR ERROR: profundidad = 1, error = certificado autofirmado en la cadena de certificados: / C = US / ST = Virginia / L = ** / O = ** / CN = ** / emailAddress = **

"VA" no es exactamente igual a "Virginia".

usuario106701
fuente
2
Pruebe openssl s_client -connect host:port -showcertsy compare la huella digital del certificado recibido con openssl x509 -noout -text -in ca.crt.
Shane Madden

Respuestas:

7

Solo para cerrar completamente este hilo: ese fue el problema. El "ca.crt" que había recibido ("Virginia") NO era el que estaba usando mi colega ("VA"), y ninguno de nosotros lo notó en ese momento.

Entonces ... básicamente (y en términos simples) VPN estaba tratando de dar un paseo por la cadena de autoridad buscando el ca.crt que esperaba encontrar, pero nunca lo hizo (porque no estaba allí).

Y este es uno de esos maravillosos mensajes por los que los sistemas criptográficos son tan conocidos: completamente exactos y, sin embargo, completamente misteriosos para los no iniciados. (Y, para ser justos, a los sistemas criptográficos no les gusta divulgar información sobre nada, ya que suponen que la persona con la que están hablando es seguramente la malvada Eve , no la buena Alice o Bob).

Mike Robinson
fuente
Para ser justos, no estoy convencido de que esto tenga algo que ver con la cadena de CA y más que ver con el hecho de que era una CA diferente en primer lugar y, por lo tanto, no se confiaba automáticamente. OpenSSL no tiene que caminar mucho. Quizás eso es lo que quisiste decir sin embargo.
gparent