Nginx-Start schlägt fehl, ssl keine solche Datei oder Verzeichnis


14

Hier ist der Fehler, den ich erhalte:

Das erneute Laden der nginx-Konfiguration: nginx: [emerg] SSL_CTX_use_certificate_chain_file ("/ path / to / cert.pem") ist fehlgeschlagen (SSL: Fehler: 02001002: Systembibliothek: fopen: Kein solcher Datei- oder Verzeichnisfehler: 20074002: BIO-Routinen: FILE_CTRL: System lib-Fehler: 140DC002: SSL-Routinen: SSL_CTX_use_certificate_chain_file: System lib) nginx: Konfigurationsdatei /etc/nginx/nginx.conf-Test fehlgeschlagen

Ich bin mir zu 100% sicher, dass sich die Datei an diesem Speicherort befindet, aber Nginx scheint zu glauben, dass sie nicht vorhanden ist. Ich habe das domain.crtund intermediate.crtmanuell in dieser Reihenfolge zusammengeführt. Ich habe mir den ganzen Tag über den Kopf gekratzt. Ich hoffe, jemand hat diesen Fehler gesehen und hat eine Lösung. (Und eine Randnotiz: Es ist kein Fehler beim Einfügen, dass der Dateispeicherort nur einmal und nicht erneut nach "Keine solche Datei oder Verzeichnis" angezeigt wird.)


3
path/to/cert.pemist sicherlich kein gültiger Ort.
Michael Hampton

Sie gehen zu Recht davon aus, dass dies nicht der tatsächliche Pfad ist. Allerdings könnte ich das leicht zu einem gültigen Teil des Ortes machen. Aber so oder so kann ich Ihnen wegen der Firma, für die dies getan wird, keine Einzelheiten mitteilen. Ich muss den Benutzernamen weglassen.
Tgoza

Antworten:


15

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, kann dies als angezeigt werden 'no such file or directory'.

Wenn die Berechtigungen stimmen, können Sie den tatsächlichen Pfad erneut überprüfen. Wie Sie es eingefügt haben (von dem ich weiß, dass Sie das Verzeichnis entfernt haben), gibt es keinen Anfang, /der das Problem sein könnte.

BEARBEITEN

Versuchen Sie, Ihr SSL-Setup in die folgende Struktur zu verschieben (und ändern Sie das, nginx.confum es wiederzugeben):

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

Nginx kann auf Ihrem Computer fehlschlagen, .pemda die Berechtigungen zu offen sind (Quelle erforderlich, um zu überprüfen, ob Nginx dies tut), aber das obige Setup sollte einwandfrei funktionieren.


Ich habe den Pfad doppelt überprüft und er enthält den /am Anfang, also habe ich die Frage geändert, um dies zu berücksichtigen . Die Datei befindet sich unter /home/user/subdirsund alle darin enthaltenen Datei- und Verzeichnisberechtigungen sind Eigentum von user.www-data (username.group name) und 775 set. Und ich denke, dass Nginx Zugriff auf alles hat, was sich im Besitz von WWW-Daten befindet, obwohl ich mich irren könnte.
Tgoza

Immer die einfachen Fehler, die ewig dauern, um herauszufinden :) Ich bin froh, dass Sie es verstanden haben.
Jim W.

Wie sah es genau aus? Ich habe meine in $root/keys/so meine cert Linie sieht aus wie ssl_certificate keys/cert.pem... müssen sie in der Webroot sein?
Bright-Star

Die Verwendung absoluter Pfade hat den Trick getan.
Heller Stern

Ich benutzte einen Docker-Container und traf dieses Problem jedes Mal, wenn ich den Container neu erstellte. Hinzufügen chmod -R 600 /etc/nginx/sslin meinem Entrypoint lösen das Problem danke
Dimitri Kopriwa

3

Ich werde meine Antwort für mein Problem hinterlassen, falls jemand auf dieses Thema stößt.

Ich habe Nginx im Docker-Container ausgeführt und habe den gleichen Fehler beim Versuch, auf die private Schlüsseldatei zuzugreifen. Nachdem ich mir einige Stunden am Kopf gekratzt habe, stelle ich fest, dass der 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 sehen. Ich hoffe das hilft.


2

Ein mögliches Szenario:

Manchmal kann es vorkommen, dass beim Konfigurieren von SSL-Dateien (privater Schlüssel und Zertifikat) für den zu konfigurierenden Virtualhost 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?

Standardmäßig sucht Nginx nach den Dateien unter "/ etc / nginx", wenn der absolute Pfad für eine normale Datei, die von Nginx verwendet wird, nicht angegeben wird.

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 ?

Angabe des absoluten Pfades der zusätzlichen Dateien, 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;
    }

}

-1

Ich hatte das gleiche Problem. Ich musste die / etc / nginx / sites-enabled / default & default.save-Dateien ändern, die während des Installationsvorgangs automatisch meinen Site-Namen ohne das .com hinzugefügt haben . Um es kurz zu machen, mussten diese beiden Zeilen in meiner / etc / nginx / sites-enabled / default geändert werden. Bitte beachten Sie, dass diese Datei in meinem Dateisystem mit einem Verknüpfungssymbol angezeigt wird. Ich konnte jedoch mit der rechten Maustaste auf die Datei klicken und sie mit der Option "Bearbeiten / Interner Editor" bearbeiten.

HTTPS - Proxy-Anforderungen an lokale Node.js-App # HTTPS - Proxy-Anforderungen an lokale Node.js-App: server {listen 443; Servername 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;

Als ich die Dateien durchgesehen und das .com hinzugefügt habe, was die Benennungskonvention ist, die ich zum Hinzufügen der Datei verwendet habe, war alles in Ordnung! Ich fand viele Entwickler, die die gleiche Frage stellten, und wollte meine Lösung herausbringen, um zu helfen, da die Antworten, die ich fand, hauptsächlich Root-Berechtigungen betrafen, aber Root-Berechtigungen waren in meinem Fall nicht das Problem. Rock on Devs.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.