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').
Ê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.
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.
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;
}
}