Nginx-Start schlägt fehl, SSL, keine solche Datei oder kein solches Verzeichnis

Nginx-Start schlägt fehl, SSL, keine solche Datei oder kein solches Verzeichnis

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.crtund intermediate.crtin 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 .pemDatei. 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.confentsprechend):

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, .pemweil 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 -vOption 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.

verwandte Informationen