web-dev-qa-db-fra.com

Le démarrage de Nginx échoue ssl aucun fichier ou répertoire de ce type

Voici l'erreur que je reçois:

Rechargement de la configuration de nginx: nginx: [Emerg] SSL_CTX_use_certificate_chain_file ("/ path/to/cert.pem") a échoué (SSL: erreur: 02001002: bibliothèque système: fopen: aucune erreur de fichier ou de répertoire: 20074002: routines BIO: FILE_CTRL: système erreur lib: 140DC002: routines SSL: SSL_CTX_use_certificate_chain_file: système lib) nginx: fichier de configuration /etc/nginx/nginx.conf échec du test

Je suis sûr à 100% que le fichier se trouve à cet emplacement, mais Nginx semble penser qu'il n'est pas là. J'ai fusionné le domain.crt et intermediate.crt manuellement dans cet ordre. Je me suis gratté la tête toute la journée. J'espère que quelqu'un a vu cette erreur et a une solution. (Et une note latérale ce n'est pas une erreur en collant que l'emplacement du fichier ne s'affiche qu'une fois et pas après 'aucun fichier ou répertoire').

15
tgoza

Êtes-vous sûr que l'utilisateur Nginx a accès au répertoire?

Vérifiez également les autorisations du .pem fichier, si Nginx ne peut pas y accéder, il peut s'afficher comme 'no such file or directory'.

Si les autorisations sont correctes, vous pouvez vérifier à nouveau le chemin réel. Comment vous l'avez collé (dont je sais que vous avez supprimé le répertoire), il n'y a pas de début / ce qui pourrait être le problème.

MODIFIER

Essayez de déplacer votre configuration SSL dans la structure suivante (ainsi que de modifier le nginx.conf refléter):

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

Nginx pourrait échouer sur votre .pem car les autorisations sont trop ouvertes (besoin d'une source pour vérifier que Nginx le fait) mais la configuration ci-dessus devrait fonctionner correctement.

16
Jim W.

Je laisserai ma réponse à mon problème, au cas où quelqu'un tomberait sur ce sujet.

J'ai exécuté nginx à l'intérieur du conteneur Docker et j'ai la même erreur en essayant d'accéder au fichier de clé privée. Après m'être gratté la tête pendant plusieurs heures, je me rends compte que le nginx de mon docker n'a pas le volume de montage qui contient mes données.

La seule option pour ajouter un volume de montage consiste à supprimer et à recréer le conteneur avec le -v option: https://docs.docker.com/engine/tutorials/dockervolumes/

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

Parfois, des choses triviales sont difficiles à voir. J'espère que cette aide.

3
bizi

Un scénario possible:

il peut parfois arriver que lors de la configuration des fichiers SSL (clé privée et certificat) pour le Virtualhost en cours de configuration, il ait été oublié de spécifier le chemin absolu où résident ces fichiers.

Par exemple, si vous suivez ce document officiel 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;
    ...
}

Supposons que vous stockiez les fichiers SSL dans "/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

Que se passe-t-il?

Par défaut, lorsqu'il n'est pas spécifié le chemin absolu d'un fichier ordinaire utilisé par Nginx, Nginx recherchera les fichiers dans "/ etc/nginx"

Depuis /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)

Que faut-il faire?

Pour spécifier le chemin absolu des fichiers supplémentaires utilisés par votre configuration Virtualhost.

Comme ça:

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

}
2
ivanleoncz