SSL: error: 0B080074: rutinas de certificado x509: X509_check_private_key: los valores de clave no coinciden

99

No puedo configurar SSL. Busqué en Google y encontré algunas soluciones, pero ninguna funcionó para mí. Necesito ayuda por favor...

Aquí está el error que obtengo cuando intento reiniciar nginx:

root@s17925268:~# service nginx restart
Restarting nginx: nginx: [emerg] SSL_CTX_use_PrivateKey_file("/etc/nginx/conf.d/ssl/ssl.key") failed (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)
nginx: configuration file /etc/nginx/nginx.conf test failed

Mi certificado es de StartSSL y es válido por 1 año.

Esto es lo que probé:

  • El certificado y la clave privada no tienen espacios finales.
  • No estoy usando el archivo server.key predeterminado.
  • Verifiqué nginx.conf y las directivas apuntan a la clave privada y al certificado correctos.

También verifiqué el módulo y obtengo un módulo diferente tanto para la clave como para el certificado.

Gracias por tu ayuda. :)

Galou
fuente

Respuestas:

36

Obtuve un hash MD5 con diferentes resultados tanto para la clave como para el certificado.

Esto lo dice todo. Tiene una discrepancia entre su clave y certificado.

El módulo debe coincidir. Asegúrese de tener la clave correcta.

dev0z
fuente
A menos que me falte algo, DESEAS absolutamente que las claves pública y privada (el archivo de certificado y el archivo de clave) sean diferentes.
Mark Berry
1
Las modulus' and the porciones del exponente público en la clave y el Certificado deben coincidir. Sin duda los archivos son diferentes. La clave se genera para un certificado en particular.
dev0z
Culpa mía. Pensé que se refería al MD5 de los archivos. Veo ahora que los certificados tienen una función de módulo separada: ¿Cómo confirmar que el módulo en su clave privada coincide con el módulo en la clave pública de su certificado SSL / TLS antes de la instalación? .
Mark Berry
165

Una vez que haya establecido que no coinciden, todavía tiene un problema: qué hacer al respecto. A menudo, el certificado puede simplemente estar ensamblado incorrectamente. Cuando una CA firma su certificado, le envían un bloque que se parece a

-----BEGIN CERTIFICATE-----
MIIAA-and-a-buncha-nonsense-that-is-your-certificate
-and-a-buncha-nonsense-that-is-your-certificate-and-
a-buncha-nonsense-that-is-your-certificate-and-a-bun
cha-nonsense-that-is-your-certificate-and-a-buncha-n
onsense-that-is-your-certificate-AA+
-----END CERTIFICATE-----

también le enviarán un paquete (a menudo dos certificados) que representan su autoridad para otorgarle un certificado. esto se verá algo así como

-----BEGIN CERTIFICATE-----
MIICC-this-is-the-certificate-that-signed-your-request
-this-is-the-certificate-that-signed-your-request-this
-is-the-certificate-that-signed-your-request-this-is-t
he-certificate-that-signed-your-request-this-is-the-ce
rtificate-that-signed-your-request-A
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICC-this-is-the-certificate-that-signed-for-that-one
-this-is-the-certificate-that-signed-for-that-one-this
-is-the-certificate-that-signed-for-that-one-this-is-t
he-certificate-that-signed-for-that-one-this-is-the-ce
rtificate-that-signed-for-that-one-this-is-the-certifi
cate-that-signed-for-that-one-AA
-----END CERTIFICATE-----

excepto que, lamentablemente, no estarán tan claramente etiquetados.

una práctica común, entonces, es agruparlos en un solo archivo: su certificado, luego los certificados de firma. Pero como no se distinguen fácilmente, a veces sucede que alguien accidentalmente los coloca en el otro orden (firmando certificados, luego el certificado final) sin darse cuenta. En ese caso, su certificado no coincidirá con su clave.

Puede probar para ver lo que el certificado cree que representa ejecutando

openssl x509 -noout -text -in yourcert.cert

Cerca de la parte superior, debería ver "Asunto:" y luego cosas que se parecen a sus datos. Si por el contrario se parece a su CA, su paquete probablemente esté en el orden incorrecto; puede intentar hacer una copia de seguridad y luego mover el último certificado al principio, con la esperanza de que sea el que sea su certificado.

Si esto no funciona, es posible que deba volver a emitir el certificado. Cuando hago una CSR, me gusta etiquetar claramente para qué servidor es (en lugar de solo ssl.key o server.key) y hacer una copia con la fecha en el nombre, como mydomain.20150306.key, etc. de esa manera Es poco probable que los pares de claves públicas y privadas se mezclen con otro conjunto.

Vynce
fuente
1
¡Esto me lo arregló en Nginx!
TTT
24
Enorme +1 por mostrar cómo ver qué hay en la cadena de certificados.
cbednarski
Definitivamente útil, paso una hora tratando de entender por qué nginx rechazaba el certificado mientras podía ver que contenía los datos
Jacopofar
3
Ok, esto también funcionó para mí con un certificado Comodo y Ngix. Simplemente empujó el último bloque de certificado a la parte superior. Gracias por la explicación detallada y la comprensión de este problema.
Andy D
1
¡Me ayuda! ¡Respuesta muy útil! Muchas gracias!
Oleg Klimenko
70
  1. Asegúrese de que su certificado y clave estén en formato PEM. Si no, conviértalos usando el comando openssl
  2. Verifique un hash MD5 de la clave pública para asegurarse de que coincida con lo que está en una clave privada

    openssl x509 -noout -modulus -in certificate.crt | openssl md5
    openssl rsa -noout -modulus -in privateKey.key | openssl md5
    
dev0z
fuente
7
Buen consejo ! Bueno, todavía obtengo el mismo error incluso si el hash md5 es el mismo para mí ^^
Delphine
4
Gracias por incluir cómo verificar los hash. Descubrí que tenía un error de copiar y pegar y me faltaba un guión desde el principio de mi pem. Me acabas de ahorrar muchos dolores de cabeza. Salud.
Justin Fortier
38

Tuve este problema porque estaba agregando el paquete y el certificado en el orden incorrecto, por lo que tal vez esto podría ayudar a otra persona.

Antes (que está mal):

cat ca_bundle.crt certificate.crt > bundle_chained.crt

Después (que es correcto)

cat certificate.crt ca_bundle.crt > bundle_chained.crt

Y no olvide actualizar el conf apropiado (ssl_certificate ahora debe apuntar al crt encadenado) como

server {
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     bundle_chained.crt;
    ssl_certificate_key www.example.com.key;
    ...
}

Desde la página de manual de nginx :

Si el certificado del servidor y el paquete se han concatenado en el orden incorrecto, nginx no se iniciará y mostrará el mensaje de error:

SSL_CTX_use_PrivateKey_file(" ... /www.example.com.key") failed
   (SSL: error:0B080074:x509 certificate routines:
    X509_check_private_key:key values mismatch)
Gill mandeep
fuente
3
En realidad, esta es una mejor respuesta a esa pregunta que una aceptada.
calvos
9

Si esto sucede y está utilizando Let's Encrypt / certbot, lo más probable es que haya utilizado en chain.pemlugar de fullchain.pem.

Debería ser algo como esto:

ssl_certificate /etc/certbot/live/example.com/fullchain.pem;
ssl_certificate_key /etc/certbot/live/example.com/privkey.pem;

Consulte los documentos de certbot "¿Dónde están mis certificados?"

Mariana
fuente
O el orden de los certificados en el paquete es incorrecto: primero letsencrypt, luego el propio certificado.
ingopingo
5

Tuve el mismo problema y finalmente lo resolví cambiando el orden de los bloques pem en el archivo de certificado.

El bloque cert debe colocarse al principio del archivo, luego los bloques intermedios y luego el bloque raíz.

Me di cuenta de este problema al comparar un archivo de certificado problemático con un archivo de certificado de trabajo.

fuweichin
fuente
1

Mis 5 centavos sobre el tema:

Tuve el mismo problema. Después de aproximadamente 1 hora de cuidarlo, descubrí que pegué el certificado incorrectamente.

Si tiene un error como este, verifique su certificado.

Mella
fuente
1

En mi caso he querido cambiar el certificado SSL, porque cambié mi servidor así que tuve que crear una nueva CSR con este comando:

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

Envié el archivo mysite.csr al proveedor de SSL de la empresa y, después de recibir el certificado crt, reinicié nginx y obtuve este error.

 (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)

Después de mucha investigación, el error fue que el módulo del archivo clave no era el mismo que el del archivo crt

Entonces, para que funcione, he creado un nuevo archivo csr pero tengo que cambiar el nombre del archivo con este comando

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

Luego recibí un nuevo archivo crt del proveedor de la compañía, reinicié nginx y funcionó.

pescado limón
fuente
0

Esto también puede suceder cuando su CA emite un certificado intermedio

Me encontré con este problema (dos veces) con nginx y ninguna de las soluciones en esta publicación explicó el problema. La publicación del blog aquí de un amable caballero llamado Marco lo clavó, y lo estoy pegando aquí para cualquiera que también se encuentre con lo que estaba viendo. https://medium.com/@mrkdsgn/steps-to-install-a-go-daddy-ssl-certificate-on-nginx-on-ubuntu-14-04-ff942b9fd7ff

En mi caso, go-daddy era el CA y esto es específico de cómo emiten el certificado y los paquetes de certificados intermedios.

Aquí está el extracto de la publicación del blog de Marco

Con Nginx, si su CA incluyó un certificado intermedio, debe crear un único archivo de certificado encadenado que contenga su certificado y los certificados intermedios de la CA.

Puede utilizar este comando para crear un archivo combinado llamado example.com.chained.crt:

cat example.com.crt intermediate.crt > example.com.chained.crt

Shyam Habarakada
fuente
0

En mi caso, el problema fue que en lugar de eso creé certificados sin ingresar ningún dato en la interfaz cli. Cuando regeneré los certificados y entré en todos los campos: ciudad, estado, etc., todo quedó bien.

 sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt
Viktor Kruglikov
fuente
0

Me pasó cuando combiné bundle.crt y main cert. La razón fue que copié el certificado principal debajo del bundle.crt. Debería ser de otra manera

1 / certificado principal 2 / bundle.crt

Krishna
fuente
0

Para Nginx:

  1. openssl req -newkey rsa:2048 -nodes -keyout domain.com.key -out domain.com.csr

  2. Archivo SSL domain_com.crty domain_com.ca-bundlearchivos, luego copie el archivo nuevo y pegue domain.com.chained.crt.

3: agregue archivos nginx:

  1. ssl_certificate /home/user/domain_ssl/domain.com.chained.crt;
  2. ssl_certificate_key /home/user/domain_ssl/domain.com.key;

Últimamente reinicia Nginx.

electrocodificador
fuente
0

SL_CTX_use_PrivateKey ("/ etc / nginx / ssl / file") falló (SSL: error: 0B080074: rutinas de certificado x509: X509_check_private_key: valores de clave no coinciden)

Este error puede ocurrir, cuando la clave privada del certificado ( ssl_certificate_keypor ejemplo .keyo .pemarchivos) no coincide con el archivo de certificado público ( ssl_certificate) en la configuración de Nginx (cheque nginx.confo sites-enabled/). Asegúrese de que ambos archivos coincidan.

Consulte los registros de errores de Nginx para obtener más detalles (p /var/log/nginx/error.log. Ej .).

Kenorb
fuente