Hier ist der Fehler, den ich bekomme:
Nginx-Konfiguration neu laden: nginx: [emerg] SSL_CTX_use_certificate_chain_file("/path/to/cert.pem") fehlgeschlagen (SSL: error:02001002:system library:fopen:Keine solche Datei oder kein solches Verzeichnis error:20074002:BIO routines:FILE_CTRL:system lib error:140DC002:SSL routines:SSL_CTX_use_certificate_chain_file:system lib) nginx: Test der Konfigurationsdatei /etc/nginx/nginx.conf fehlgeschlagen
Ich bin 100 % sicher, dass sich die Datei an diesem Ort befindet, aber Nginx scheint zu glauben, dass sie nicht dort ist. Ich habe sie domain.crt
und intermediate.crt
in dieser Reihenfolge manuell zusammengeführt. Ich habe mir den ganzen Tag den Kopf darüber zerbrochen. Ich hoffe, jemand hat diesen Fehler gesehen und hat eine Lösung. (Und eine Randbemerkung: Es ist kein Fehler beim Einfügen, dass der Dateispeicherort nur einmal und nicht noch einmal nach „keine solche Datei oder kein solches Verzeichnis“ angezeigt wird.)
Antwort1
Sind Sie sicher, dass der Nginx-Benutzer Zugriff auf das Verzeichnis hat?
Überprüfen Sie auch die Berechtigungen der .pem
Datei. Wenn Nginx nicht darauf zugreifen kann, wird sie möglicherweise als angezeigt 'no such file or directory'
.
Wenn die Berechtigungen richtig sind, solltest du den tatsächlichen Pfad noch einmal überprüfen. So wie du es eingefügt hast (ich weiß, dass du das Verzeichnis entfernt hast), gibt es keinen Anfang, /
was das Problem sein könnte.
BEARBEITEN
Versuchen Sie, Ihr SSL-Setup in die folgende Struktur zu verschieben (und ändern Sie es nginx.conf
entsprechend):
sudo mkdir /etc/nginx/ssl
sudo chown -R root:root /etc/nginx/ssl
sudo chmod -R 600 /etc/nginx/ssl
Nginx könnte bei Ihnen fehlschlagen, .pem
weil die Berechtigungen zu offen sind (Sie benötigen eine Quelle, um zu überprüfen, ob Nginx dies tut), aber das obige Setup sollte einwandfrei funktionieren.
Antwort2
Ich werde meine Antwort auf mein Problem hinterlassen, falls jemand auf dieses Thema stößt.
Ich habe nginx im Docker-Container ausgeführt und habe denselben Fehler beim Versuch, auf die private Schlüsseldatei zuzugreifen. Nachdem ich mir mehrere Stunden den Kopf zerbrochen habe, komme ich zu der Erkenntnis, dass das nginx meines Dockers nicht über das Mount-Volume verfügt, das meine Daten enthält.
Die einzige Möglichkeit, ein Mount-Volume hinzuzufügen, besteht darin, den Container mit der folgenden -v
Option zu entfernen und neu zu erstellen:
https://docs.docker.com/engine/tutorials/dockervolumes/
docker run -d -P --name docker-nginx -v /etc/ssl/certs:/etc/ssl/certs nginx
Manchmal sind triviale Dinge schwer zu erkennen. Ich hoffe, das hilft.
Antwort3
Ein mögliches Szenario:
Manchmal kann es vorkommen, dass beim Konfigurieren von SSL-Dateien (privater Schlüssel und Zertifikat) für den zu konfigurierenden virtuellen Host vergessen wurde, den absoluten Pfad anzugeben, in dem sich diese Dateien befinden.
Wenn Sie beispielsweise diesem offiziellen Dokument von Nginx folgen: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;
...
}
Angenommen, Sie speichern die SSL-Dateien in "/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
Was geschieht?
Wenn der absolute Pfad für eine normale Datei, die von Nginx verwendet wird, nicht angegeben ist, sucht Nginx standardmäßig unter „/etc/nginx“ nach den Dateien.
Aus /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)
Was getan werden muss ?
Um den absoluten Pfad der zusätzlichen Dateien anzugeben, die von Ihrer Virtualhost-Konfiguration verwendet werden.
So was:
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;
}
}
Antwort4
Ich bin auf dasselbe Problem gestoßen.
[Symptome]
Es kann nicht mit „systemctl restart nginx“ gestartet werden.
Aber der folgende Befehl kann nginx starten.
„/usr/sbin/nginx“
[Ursache]
Ich habe die Zertifikatsdatei direkt verwendet, die ich vom Anbieter heruntergeladen habe.
[gelöst]
Ich habe den Zertifikatstext kopiert und in die Datei eingefügt, die ich (mit vim) erstellt habe.