Error de SSL: no se puede obtener el certificado del emisor local

95

Tengo problemas para configurar SSL en un servidor Debian 6.0 de 32 bits. Soy relativamente nuevo con SSL, así que tengan paciencia conmigo. Incluyo toda la información que puedo.
Nota: El verdadero nombre de dominio se ha cambiado para proteger la identidad y la integridad del servidor.

Configuración

El servidor se ejecuta con nginx. Está configurado de la siguiente manera:

ssl_certificate           /usr/local/nginx/priv/mysite.ca.chained.crt;
ssl_certificate_key       /usr/local/nginx/priv/mysite.ca.key;
ssl_protocols             SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers               HIGH:!aNULL:!MD5;
ssl_verify_depth          2;

Encadené mi certificado usando el método descrito aquí

cat mysite.ca.crt bundle.crt > mysite.ca.chained.crt

donde mysite.ca.crtestá el certificado que me ha entregado la autoridad de firma y el bundle.crtcertificado de CA que también me ha enviado mi autoridad de firma. El problema es que no compré el certificado SSL directamente de GlobalSign, sino a través de mi proveedor de alojamiento, Singlehop.

Pruebas

El certificado se valida correctamente en Safari y Chrome, pero no en Firefox. La búsqueda inicial reveló que puede ser un problema con la CA.

Exploré la respuesta a una pregunta similar , pero no pude encontrar una solución, ya que realmente no entiendo para qué sirve cada certificado.

Usé s_client de openssl para probar la conexión y recibí un resultado que parece indicar el mismo problema que la pregunta similar . El error es el siguiente:

depth=0 /OU=Domain Control Validated/CN=*.mysite.ca
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 /OU=Domain Control Validated/CN=*.mysite.ca
verify error:num=27:certificate not trusted
verify return:1

Puede encontrar un detalle completo de la respuesta de openssl (con certificados e información innecesaria truncada) aquí .

También veo la advertencia:

No client certificate CA names sent

¿Es posible que ese sea el problema? ¿Cómo puedo asegurarme de que nginx envíe estos nombres de CA?

Intentos de resolver el problema

Intenté resolver el problema descargando la CA raíz directamente desde GlobalSign, pero recibí el mismo error. Actualicé las CA raíz en mi servidor Debian usando el update-ca-certificatescomando, pero nada cambió. Es probable que esto se deba a que la CA enviada por mi proveedor era correcta, por lo que el certificado se encadenó dos veces, lo que no ayuda.

0 s:/OU=Domain Control Validated/CN=*.mysite.ca
   i:/C=BE/O=GlobalSign nv-sa/CN=AlphaSSL CA - SHA256 - G2
1 s:/O=AlphaSSL/CN=AlphaSSL CA - G2
   i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
2 s:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
   i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA

Próximos pasos

Por favor, avíseme si hay algo que pueda probar o si tengo todo configurado incorrectamente.

Jamie Counsell
fuente
10
Su certificado de dominio está firmado por el emisor AlphaSSL CA - SHA256 - G2. Sin embargo, su cadena suministra intermedios AlphaSSL CA - G2. Creo que debe eliminar el certificado intermedio actual ( AlphaSSL CA - G2) y reemplazarlo con el que tiene la huella digital ae:bf:32:c3:c8:32:c7:d7...( AlphaSSL CA - SHA256 - G2). Además, no es necesario enviar GlobalSign Root CA. El cliente debe arraigar su confianza en su (o en el intermedio).
jww
6
Podrá probar esto localmente con OpenSSL. Prueba openssl s_client -connect <server>:<port> -CAfile <GlobalSign Root CA.pem>. El comando debe completarse con un Verify OK (0)o similar. Cuando obtiene el Verify OK (0), el servidor está configurado correctamente (para este problema).
jww
6
Cuando descargue ese nuevo intermedio, deberá convertirlo a PEM con openssl x509 -in gsalphasha2g2.crt -inform DER -out Alpha-SHA256-G2.pem -outform PEM.
jww
Hermoso. Creo que ahora está funcionando. Por alguna razón, pensé que había intentado obtener el SHA 256, pero debo haber fallado al convertirlo correctamente. SInceramente Gracias.
Jamie Counsell
1
sí, lo que hay que buscar son los pares Sujeto-Emisor que regresan a una raíz o CA. OpenSSL los muestra como i:y s:debajo s_client. Una vez que tenga los certificados que necesita, concat todos ellos excepto el root. Debido a que están concatenadas, deben estar en formato PEM. La URL fue útil. Se está volviendo viejo tratar de ayudar a las personas que no brindan información para que podamos verla localmente con s_client. (Si no proporcionó la URL, habría votado para cerrar).
jww

Respuestas:

-1

Si es un usuario de Linux Actualice el nodo a una versión posterior ejecutando

sudo apt update

 sudo apt install build-essential checkinstall libssl-dev

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.35.1/install.sh | bash

nvm --version

nvm ls

nvm ls-remote

nvm install [version.number]

Esto debería solucionar tu problema

Collins Koech
fuente