¿Los clientes deben confiar en los certificados de cliente?

9

Estoy buscando alguna aclaración sobre los requisitos de confianza (si los hay) de los certificados de los clientes.

Estoy trabajando con un tercero para acceder a sus servicios a través de Mutual TLS.

Genero un CSR, lo envío a un tercero, me envían un certificado (que han generado utilizando su propia CA). Es un solo certificado. No se me han proporcionado certificados intermedios, ya que supongo que no los necesita para emitir solicitudes autenticadas de certificados de clientes .

Cuando intento conectarme con este certificado, aparece un error de protocolo de enlace:

openssl s_client -connect the-server.com:443 -cert the-cert.pem -key the-key.pem -state
CONNECTED(00000003)
SSL_connect:before/connect initialization
SSL_connect:SSLv2/v3 write client hello A
SSL_connect:SSLv3 read server hello A
depth=2 /C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2006 VeriSign, Inc. - For authorized use only/CN=VeriSign Class 3 Public Primary Certification Authority - G5
verify error:num=20:unable to get local issuer certificate
verify return:0
SSL_connect:SSLv3 read server certificate A
SSL_connect:SSLv3 read server certificate request A
SSL_connect:SSLv3 read server done A
SSL_connect:SSLv3 write client certificate A
SSL_connect:SSLv3 write client key exchange A
SSL_connect:SSLv3 write certificate verify A
SSL_connect:SSLv3 write change cipher spec A
SSL_connect:SSLv3 write finished A
SSL_connect:SSLv3 flush data
SSL3 alert read:fatal:handshake failure
SSL_connect:failed in SSLv3 read finished A
78460:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-59/src/ssl/s3_pkt.c:1145:SSL alert number 40
78460:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-59/src/ssl/s23_lib.c:185:

Me han dicho que está fallando: 'los archivos pem no contienen los certificados de CA públicos que firmaron el certificado del cliente' sin embargo, si este fuera el caso, ¿el cliente incluso enviaría Certificado (como parece que lo está haciendo en los pasos de negociación de TLS anteriores) si fuera el caso en el que tenía que confiar en él.

    
pregunta Mark Kelly 11.11.2015 - 13:56
fuente

3 respuestas

8
  

¿Es necesario que el cliente confíe en los certificados de cliente?

No, el certificado del cliente solo es validado por el servidor y el certificado del servidor solo por el cliente. Por lo tanto, cualquier tipo de confianza con respecto al certificado del cliente o su CA de firma solo se necesita en el servidor.

  

... Es un certificado único, sin intermediario

     

... los archivos pem no contienen los certificados CA públicos que firmaron el certificado del cliente

Sugeriría que la primera declaración sea incorrecta, es decir, que el certificado que obtuvo fue realmente firmado por una CA intermedia y no incluyó los certificados de cadena necesarios. Los certificados raíz en sí no deben enviarse porque tienen que residir como de confianza en el lado que realiza la validación, es decir, el servidor en caso de certificados de clientes.

Le sugeriría que averigüe qué CA tienen como confianza previa en el lado del servidor y compare esto con el emisor de su certificado. Si no coinciden, faltan los certificados de cadena. Si coinciden, podría ser un problema con la configuración en el lado del servidor, es decir, que no tienen la CA necesaria configurada como confiable para el servidor para la autenticación del cliente.

    
respondido por el Steffen Ullrich 11.11.2015 - 14:46
fuente
4

No, el cliente no necesita confiar en los certificados que presenta al servidor. (El servidor tampoco necesita confiar en los certificados que presenta al cliente). Solo el otro lado de la conexión debe poder verificar los certificados presentados.

Dicho esto, la clave privada y el certificado utilizado por el cliente DEBEN coincidir. Puedes verificarlo usando los siguientes comandos:

openssl rsa -in localhost.key -modulus -noout openssl x509 -in localhost.crt -modulus -noout Su salida debe coincidir exactamente.

El servidor puede esperar que el cliente envíe el certificado de CA intermedio necesario para verificar la autenticidad del certificado de usuario, pero eso sería muy extraño y, básicamente, inaudito.

Finalmente, si está implementando un nuevo sistema, le sugeriría encarecidamente a no que use OpenSSL 0.9.8: solo recibirá actualizaciones de seguridad hasta que fin de año .

    
respondido por el Hubert Kario 11.11.2015 - 14:46
fuente
1

Dado que el certificado del cliente es emitido por una CA interna, el servidor al que se va a conectar deberá "confiar" en la CA interna para poder verificar el certificado del cliente.

Incluso si el cliente pudiera presentar el certificado público interno de la CA, el servidor todavía no confiará en el certificado porque no ha sido firmado por una de sus raíces confiables (es decir, una de las muchas CA públicas ... Verisign, Comodo, etc. .).

Los administradores del servidor deben instalar el certificado de CA interno (es decir, la raíz de su certificado de cliente) en el almacén de confianza del servidor.

    
respondido por el R15 11.11.2015 - 15:33
fuente

Lea otras preguntas en las etiquetas