La verificación del certificado falla para un certificado autofirmado

0

Estoy intentando usar un servicio que usa un certificado autofirmado.

  1. Descarga el certificado:

    # printf QUIT | openssl s_client -connect my-server.net:443 -showcerts 2>/dev/null >  my-server.net.crt
    
  2. Compruebe que esté autofirmado (el emisor y el asunto son los mismos):

    # openssl x509 -subject -issuer -noout -in my-server.net.crt
    subject=O = Acme Co, CN = Controller Fake Certificate
    issuer=O = Acme Co, CN = Controller Fake Certificate
    
  3. Intenta usarlo con la opción --cacert de curl:

    # curl https://my-server.net  --cacert my-server.net.crt
    curl: (60) SSL certificate problem: unable to get local issuer certificate
    More details here: https://curl.haxx.se/docs/sslcerts.html
    
    curl failed to verify the legitimacy of the server and therefore could not
    establish a secure connection to it. To learn more about this situation and
    how to fix it, please visit the web page mentioned above.
    

No entiendo por qué curl no puede verificar el certificado.

    
pregunta little-dude 16.08.2018 - 21:53
fuente

2 respuestas

2

De los comentarios:

  

¿Esto es realmente un certificado de CA, es decir, tiene restricciones básicas CA verdaderas? ... - Steffen Ullrich
  @SteffenUllrich tienes razón, tiene: CA: FALSO - pequeño amigo

La firma de un certificado requiere que el certificado del emisor tenga los distintivos correctos para que la firma esté realmente permitida. Para firmar correctamente un certificado, el certificado del emisor debe tener las restricciones básicas CA establecidas en true. Esto es cierto tanto cuando se firma otro certificado como para firmar el mismo certificado (es decir, autofirmado). Parece que el certificado no tenía la CA correcta: bandera verdadera en el caso aquí.

Además, la opción --cacert es como su nombre dice solo para certificados de CA y no para certificados arbitrarios. Por ejemplo, si tiene los certificados de hoja de un sitio que simplemente no puede agregar, es tan confiable con --cacert ya que (generalmente) no es un certificado de CA. Simplemente se ignorará al leer los certificados del archivo dado.

    
respondido por el Steffen Ullrich 17.08.2018 - 05:56
fuente
1

Dos conjeturas:

1. ¿Está permitido hacer la autenticación del servidor?

Verifique el campo Uso de clave extendido / mejorado de su certificado autofirmado.

2. ¿Aparece el nombre de host del servidor en los campos CN o SAN?

Curl comprobará que el certificado devuelto por el servidor coincida con el nombre de host que solicitó ( my-server.net ).

    
respondido por el Mike Ounsworth 16.08.2018 - 21:59
fuente

Lea otras preguntas en las etiquetas