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

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

Aquí está el error que recibo:

Recargar la configuración de nginx: nginx: [emerg] SSL_CTX_use_certificate_chain_file("/path/to/cert.pem") falló (SSL: error:02001002:system Library:fopen:No existe tal archivo o directorio error:20074002:BIO rutinas:FILE_CTRL:system error de lib:140DC002:rutinas SSL:SSL_CTX_use_certificate_chain_file:system lib) nginx: falla en la prueba del archivo de configuración /etc/nginx/nginx.conf

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 con 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, ya que la ubicación del archivo se muestra solo una vez y no nuevamente después de "no existe tal archivo o directorio").

Respuesta1

¿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 mostrarse como 'no such file or directory'.

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

EDITAR

Intente mover su configuración SSL a la siguiente estructura (y cámbiela para nginx.confque refleje):

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 .pemporque los permisos son demasiado abiertos (necesita una fuente para verificar que Nginx hace esto), pero la configuración anterior debería funcionar bien.

Respuesta2

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

He ejecutado nginx dentro del contenedor acoplable 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 ventana acoplable 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.

Respuesta3

Un posible escenario:

En ocasiones puede suceder que al configurar archivos SSL (clave privada y certificado) para el Virtualhost que se está configurando, se haya olvidado especificar la ruta absoluta donde residen estos archivos.

Por ejemplo, si sigues 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;
    ...
}

Supongamos 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 sucede?

De forma predeterminada, cuando no se especifica la ruta absoluta para un archivo normal que utiliza Nginx, Nginx buscará los archivos en "/etc/nginx".

De /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é se debe hacer?

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

Como 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;
    }

}

Respuesta4

He encontrado el mismo problema.

[síntoma]
No puede comenzar con "systemctl restart nginx".
Pero el siguiente comando puede iniciar nginx.
"/usr/sbin/nginx"

[causa]
He utilizado el archivo de certificado directamente descargado del proveedor.

[resuelto]
Copié el texto del certificado y lo pegué en el archivo que creé (por vim).

información relacionada