Solucionar error "key values mismatch" al recargar la configuración en NGINX.
Cuando instalemos un nuevo certificado SSL en NGINX, puede que nos encontremos con el siguiente error al ejecutar nginx -s reload (comando que carga los cambios efectuados en los archivos .conf):
Este error se pude deber a 2 causas:
Causa 1:
Esta causa se da cuando estamos enlazando una clave pública (crt) y una clave privada (key) que no coinciden. Es un problema común cuando hay varias partes involucradas en la instalación de un certificado SSL (la persona que genera el CSR, la que efectúa el pago del certificado, la que lo instala en NGINX...). En el tramo final del proceso, puede darse que la persona encargada de instalar los archivos acabe recibiendo un key y un crt que no hagan match.
Para solucionar este problema, deberemos buscar la key que sí combine con el crt, o en última instancia, volver a generar un nuevo crt en la entidad certificadora donde compramos el certificado SSL originalmente, en caso de que no encontremos el key y el crt que hagan match.
Para quien le interese, ya mostré cómo comprobar el match entre clave pública y clave privada de un certificado SSL mediante el comando openssl en una entrada anterior.
Causa 2:
Otro de los causantes de este error es el orden de concatenacion de los certificados.
Al especificar un archivo crt en NGINX, no basta con especificar el dominio.com.crt como archivo en el apartado ssl_certificate, sino que debemos unificar el crt del dominio con los certificados intermedios y el certificado de nuestra entidad certificadora.
Este orden de unificación o concatenación debe ser el siguiente:
tu_dominio.crt) -> intermediario_1.crt -> intermediario_2.crt -> root_ca.crt
Para juntar todos los certificados en un solo archivo, podemos usar el siguiente comando:
Una vez concatenados los certificados, ya podemos usar el archivo resultante en el apartado ssl_certificate de NGINX para el dominio que queramos configurar.
Cuando instalemos un nuevo certificado SSL en NGINX, puede que nos encontremos con el siguiente error al ejecutar nginx -s reload (comando que carga los cambios efectuados en los archivos .conf):
nginx: [emerg] SSL_CTX_use_PrivateKey("/etc/ssl/name.key") failed
(SSL: error:0B080074:x509 certificate routines:
X509_check_private_key:key values mismatch)
Este error se pude deber a 2 causas:
Causa 1:
Las claves pública/privada no coinciden
Esta causa se da cuando estamos enlazando una clave pública (crt) y una clave privada (key) que no coinciden. Es un problema común cuando hay varias partes involucradas en la instalación de un certificado SSL (la persona que genera el CSR, la que efectúa el pago del certificado, la que lo instala en NGINX...). En el tramo final del proceso, puede darse que la persona encargada de instalar los archivos acabe recibiendo un key y un crt que no hagan match.
Para solucionar este problema, deberemos buscar la key que sí combine con el crt, o en última instancia, volver a generar un nuevo crt en la entidad certificadora donde compramos el certificado SSL originalmente, en caso de que no encontremos el key y el crt que hagan match.
Para quien le interese, ya mostré cómo comprobar el match entre clave pública y clave privada de un certificado SSL mediante el comando openssl en una entrada anterior.
Causa 2:
Orden incorrecto en la concatenación de certificados
Otro de los causantes de este error es el orden de concatenacion de los certificados.
Al especificar un archivo crt en NGINX, no basta con especificar el dominio.com.crt como archivo en el apartado ssl_certificate, sino que debemos unificar el crt del dominio con los certificados intermedios y el certificado de nuestra entidad certificadora.
Este orden de unificación o concatenación debe ser el siguiente:
tu_dominio.crt) -> intermediario_1.crt -> intermediario_2.crt -> root_ca.crt
Para juntar todos los certificados en un solo archivo, podemos usar el siguiente comando:
HOST# cat tu_dominio.crt gd_bundle.crt >> dominio.chained.crt
Una vez concatenados los certificados, ya podemos usar el archivo resultante en el apartado ssl_certificate de NGINX para el dominio que queramos configurar.