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

14

Voici l'erreur que j'obtiens:

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 est à cet endroit mais Nginx semble penser qu'il n'est pas là. J'ai fusionné le domain.crtet intermediate.crtmanuellement 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 non après `` aucun fichier ou répertoire '').

tgoza
la source
3
path/to/cert.pemn'est certainement pas un emplacement valide.
Michael Hampton
Vous avez raison de supposer que ce n'est pas le chemin réel. Cependant, je pourrais facilement en faire une partie valide de l'emplacement. Mais de toute façon, je ne suis pas en mesure de vous fournir des détails en raison de la société pour laquelle cela est fait. Je dois omettre le nom d'utilisateur.
tgoza

Réponses:

15

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

Vérifiez également les autorisations du .pemfichier, si Nginx ne peut pas y accéder, il peut s'afficher en tant que '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 dir), il n'y a pas de début /qui pourrait être le problème.

ÉDITER

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

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

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

Jim W.
la source
J'ai revérifié le chemin et il contient le /au début, j'ai donc changé la question pour refléter cela. Le fichier se trouve dans /home/user/subdirset toutes les autorisations de fichier et de répertoire qu'il contient appartiennent à user.www-data (nom d'utilisateur.nom de groupe) et 775 set. Et je pense que nginx a accès à tout ce qui appartient à www-data, bien que je puisse me tromper.
tgoza
Toujours les erreurs simples qui prennent une éternité à comprendre :) Heureux que vous ayez compris.
Jim W.
à quoi cela ressemblait-il exactement? J'ai le mien $root/keys/donc ma ligne de cert ressemble à ssl_certificate keys/cert.pem... doit-elle être dans le webroot?
étoile brillante
L'utilisation de chemins absolus a fait l'affaire.
étoile brillante
J'utilisais un docker-container et je rencontrais ce problème chaque fois que je recréais le conteneur. l'ajout chmod -R 600 /etc/nginx/sslde mon point d'entrée résout le problème grâce
Dimitri Kopriwa
3

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 est de supprimer et de recréer le conteneur avec l' -voption: 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.

bizi
la source
2

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ù ces fichiers résident.

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

Ce qui se produit?

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

}
ivanleoncz
la source
-1

J'ai eu le même problème. J'ai dû changer les fichiers / etc / nginx / sites-enabled / default & default.save qui ont été ajoutés automatiquement mon nom de site sans le .com après pendant le processus d'installation, QUEL ÉTAIT LE PROBLÈME DANS MON INSTANCE . Pour faire court, ces deux lignes devaient être modifiées dans mon / etc / nginx / sites-enabled / default. Veuillez noter que ce fichier est affiché avec une icône de raccourci dans mon système de fichiers mais j'ai pu faire un clic droit sur le fichier et le modifier avec l'option "Éditer / Éditeur interne".

HTTPS - requêtes proxy sur Node.js local ap # HTTPS - requêtes proxy sur Node.js local application: serveur {écouter 443; nom_serveur 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;

Lorsque j'ai parcouru les fichiers et ajouté le .com, qui est la convention de dénomination que j'ai utilisée pour ajouter le fichier, aux références switchmagic dans les répertoires de fichiers qui lançaient les erreurs, tout allait bien! J'ai trouvé beaucoup de développeurs poser la même question, donc je voulais lancer ma solution pour aider car les réponses que j'ai trouvées concernaient principalement les autorisations root, mais les autorisations root n'étaient pas le problème dans mon cas. Rock on Devs.

user3777549
la source