El inicio de Nginx falla ssl no existe tal archivo o directorio

14

Aquí está el error que recibo:

Error al recargar la configuración de nginx: nginx: [emerg] SSL_CTX_use_certificate_chain_file ("/ path / to / cert.pem") falló (SSL: error: 02001002: biblioteca del sistema: fopen: No existe dicho archivo o error de directorio: 20074002: BIO rutinas: FILE_CTRL: sistema error de lib: 140DC002: rutinas SSL: SSL_CTX_use_certificate_chain_file: system lib) nginx: archivo de configuración /etc/nginx/nginx.conf falló la prueba

Estoy 100% seguro de que el archivo está en esa ubicación, pero Nginx parece pensar que no está allí. Fusioné domain.crty intermediate.crtmanualmente en ese orden. He estado rascándome la cabeza sobre esto todo el día. Espero que alguien haya visto este error y tenga una solución. (Y una nota al margen no es un error al pegar que la ubicación del archivo se muestra solo una vez y no otra vez después de 'no existe tal archivo o directorio').

tgoza
fuente
3
path/to/cert.pemCiertamente no es una ubicación válida.
Michael Hampton
Tiene razón al suponer que ese no es el camino real. Sin embargo, podría hacer que sea una parte válida de la ubicación. Pero de cualquier manera, no puedo proporcionarle detalles debido a la compañía para la que se está haciendo esto. Tengo que dejar de lado el nombre de usuario.
tgoza

Respuestas:

15

¿Está seguro de que el usuario de Nginx tiene acceso al directorio?

También verifique los permisos del .pemarchivo, si Nginx no puede acceder a él, puede mostrar como 'no such file or directory'.

Si los permisos son correctos, puede verificar la ruta real nuevamente. Cómo lo pegaste (que sé que eliminaste el directorio) no hay un comienzo /que podría ser el problema.

EDITAR

Intente mover su configuración SSL a la siguiente estructura (así como cambiar la nginx.confpara reflejar):

sudo mkdir /etc/nginx/ssl
sudo chown -R root:root /etc/nginx/ssl
sudo chmod -R 600 /etc/nginx/ssl

Nginx podría estar fallando .pemdebido a que los permisos son demasiado abiertos (necesita fuente para verificar que Nginx hace esto) pero la configuración anterior debería funcionar bien.

Jim W.
fuente
Verifiqué dos veces el camino y contiene el /al principio, así que cambié la pregunta para reflejar eso. El archivo se encuentra en /home/user/subdirsy todos los permisos de archivo y directorio dentro de allí son propiedad de user.www-data (username.group name) y 775 set. Y creo que nginx tiene acceso a todo lo que pertenece a www-data, aunque podría estar equivocado.
tgoza
Siempre los simples errores que tardan una eternidad en descubrir :) Me alegra que lo hayas solucionado.
Jim W.
¿Cómo se veía exactamente? Tengo el mío $root/keys/así que mi línea de certificación parece ssl_certificate keys/cert.pem... ¿tienen que estar en la raíz web?
estrella brillante
Usar caminos absolutos hizo el truco.
estrella brillante
Estaba usando un contenedor acoplable y me encontraba con este problema cada vez que recreaba el contenedor. agregando chmod -R 600 /etc/nginx/sslen mi punto de entrada resolver el problema gracias
Dimitri Kopriwa
3

Dejaré mi respuesta para mi problema, en caso de que alguien se encuentre con este tema.

Tengo nginx ejecutado dentro del contenedor docker, y tengo el mismo error al intentar acceder al archivo de clave privada. Después de rascarme la cabeza durante varias horas, me doy cuenta de que el nginx de mi docker no tiene el volumen de montaje que contiene mis datos.

La única opción para agregar volumen de montaje es eliminar y volver a crear el contenedor con la -vopción: https://docs.docker.com/engine/tutorials/dockervolumes/

docker run -d -P --name docker-nginx -v /etc/ssl/certs:/etc/ssl/certs nginx

A veces, las cosas triviales son difíciles de ver. Espero que esto ayude.

bizi
fuente
2

Un posible escenario:

a veces puede suceder que, al configurar archivos SSL (clave privada y certificado) para el Virtualhost que se está configurando, se olvidó de especificar la ruta absoluta donde residen estos archivos.

Por ejemplo, si sigue este documento oficial de Nginx: http://nginx.org/en/docs/http/configuring_https_servers.html

server {
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     tdmssl.crt;
    ssl_certificate_key tdmssl.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ...
}

Suponga que almacena los archivos SSL dentro de " /etc/nginx/conf.d ":

root@ilg40:/etc/nginx/conf.d# pwd
/etc/nginx/conf.d
root@ilg40:/etc/nginx/conf.d# ll
total 16
drwxr-xr-x 2 root root 4096 Jan 24 17:39 ./
drwxr-xr-x 5 root root 4096 Jan 24 21:15 ../
-rw-r--r-- 1 root root 1359 Jan 24 17:39 tdmssl.crt
-rw-r--r-- 1 root root 1675 Jan 24 17:39 tdmssl.key

¿Lo que pasa?

Por defecto, cuando no se especifica la ruta absoluta para un archivo ordinario que utiliza Nginx, Nginx buscará los archivos en "/ etc / nginx"

Desde /var/log/nginx/error.log

2017/01/24 21:05:10 [emerg] 13113#0: 
BIO_new_file("/etc/nginx/tdmssl.crt") 
failed(SSL:error:02001002:system library:fopen:
No such file or directory:fopen('/etc/nginx/tdmssl.crt','r') 
error:2006D080:BIO routines:BIO_new_file:no such file)

¿Qué hay que hacer?

Para especificar la ruta absoluta de los archivos adicionales que utiliza su configuración de Virtualhost.

Me gusta esto:

root@ilg40:/etc/nginx/conf.d# cd
root@ilg40:~# cat /etc/nginx/sites-available/tdm 
server {

    listen          443 ssl;
    server_name         tjsdatamanager.redtjs.com;
    ssl_certificate     /etc/nginx/conf.d/tdmssl.crt;
    ssl_certificate_key /etc/nginx/conf.d/tdmssl.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location / {
        include proxy_params;
        proxy_pass http://unix:/etc/tdm/flask/wsgi.sock;
    }

}
ivanleoncz
fuente
-1

Tuve el mismo problema. Tuve que cambiar los archivos / etc / nginx / sites-enabled / default & default.save que se agregaron automáticamente al nombre de mi sitio sin el .com después del mismo durante el proceso de configuración, QUE FUE EL PROBLEMA EN MI INSTANCIA . Para mantenerlo breve, estas dos líneas debían cambiarse en mi / etc / nginx / sites-enabled / default. Tenga en cuenta que este archivo se muestra con un icono de acceso directo en mi sistema de archivos, pero pude hacer clic derecho en el archivo y editarlo con la opción "Editar / Editor interno".

HTTPS: solicitudes de proxy en Node.js local ap # HTTPS: solicitudes de proxy en la aplicación Node.js local: servidor {listen 443; nombre_servidor switchmagic.com;

    ssl on;
    # Use certificate and key provided by Let's Encrypt:
    ssl_certificate /etc/letsencrypt/live/switchmagic.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/switchmagic.com/privkey.pem;

Cuando revisé los archivos y agregué .com, que es la convención de nomenclatura que usé para agregar el archivo, a las referencias de switchmagic en los directorios de archivos que arrojaban los errores, ¡ todo estaba bien! Encontré a muchos desarrolladores haciendo la misma pregunta, así que quería lanzar mi solución para ayudar, ya que las respuestas que encontré eran principalmente sobre permisos de root, pero los permisos de root no eran el problema en mi caso. Rock on Devs.

usuario3777549
fuente