SSL & Ngnix: Im Server, der beim SSL-Handshake den SSL-Port überwacht, ist kein "ssl_certificate" definiert

23

Ich habe es geschafft, meine Zertifikate mit LE ohne Fehler zu erstellen. Ich habe es auch geschafft, meinen Datenverkehr von Port 80 auf Port 443 umzuleiten. Aber wenn ich meinen Nginx-Server neu lade, kann ich nicht auf meine Website zugreifen. Die Ngnix-Fehlerprotokolle zeigen diese Zeile:

4 no "ssl_certificate" is defined in server listening on SSL port while SSL handshaking, client: 192.168.0.104, server: 0.0.0.0:443

Ich denke, dies bedeutet, dass die Zertifikate nicht gefunden werden können. Ich habe dann zum Pfad der Zertifikate navigiert und sie sind beide vorhanden. Woran könnte das liegen? So sieht meine Ngnix-Konfiguration aus:

server {
       listen         80;
       server_name    pumaportal.com www.pumaportal.com;
       return         301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;

    server_name pumaportal.com www.pumaportal.com;

    add_header Strict-Transport-Security "max-age=31536000";

    ssl_certificate /etc/letsencrypt/live/pumaportal.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/pumaportal.com/privkey.pem;

    ssl_stapling on;
    ssl_stapling_verify on;

    access_log /var/log/nginx/sub.log combined;

    location /.well-known {
       alias /[MY PATH]/.well-known;
    }

    location / {
        proxy_pass http://localhost:2000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header X-Forwarded-For $remote_addr;
    }

}

Es scheint alles ziemlich einfach zu sein. Ich verstehe nicht, wo das Problem liegen könnte.

Nach dem Ausführen von nginx -t scheint alles in Ordnung zu sein:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Rémi
quelle
Hast du noch andere serverBlöcke? Was genau hast du gemacht, als du diesen Fehler bekamst?
Tero Kilkanen
1
Hat der Nginx-Benutzer Zugriff auf die Zertifikatsdatei und die Schlüsseldatei? Es reicht nicht aus, Lesezugriff auf die Dateien zu haben, der Benutzer muss auch über Lese- und Ausführungsberechtigungen für alle Verzeichnisse in der Kette zur Datei verfügen.
Jenny D sagt Reinstate Monica
1
Related
mbomb007

Antworten:

25

Ich vermute, Sie haben einen anderen Server, der Port 443 überwacht. Auf diesem Server ist kein SSL-Zertifikat definiert, und er wird automatisch ausgewählt (SNI). Versuchen Sie, alle symbolischen Links aus / etc / nginx / sites-enabled zu löschen, mit Ausnahme dieses einen Servers, den Sie zum Lauschen bringen möchten (falls dies möglich ist, überprüfen Sie andernfalls alle Ihre Server auf das Abhören von 443, ohne korrekt konfiguriert zu sein).

CA Vuyk
quelle
2
BINGO! In meinem Fall erstelle ich eine Konfigurationsdatei für vhost mail.mydomain, damit ich ein LE-Zertifikat für meine Taubenschlag-Installation erstellen und vergessen habe, eine Konfigurationsdatei hinzuzufügen.
Marcos Regis
7

Ich habe das gleiche Problem heute Morgen behoben. Daher bin ich hier, um den Punkt von CA zu klären (der jetzt, da ich das Problem verstehe, gut gemacht wurde). Wahrscheinlich haben Sie zwei Serverblöcke:

# Standard
Server {
    listen 443 default_server; # Beachten Sie das Fehlen von `ssl`
    Servername _;
    # ...
}

#real site
Server {
    hören 443 ssl;
    Servername ;
    # ...
}

SNI stimmt nur mit denen überein, die mit einem sslListener gekennzeichnet sind. Der Standardserver erfasst jedoch den gesamten eingehenden Datenverkehr auf 443, unabhängig von SSL oder nicht. Daher verhindert es, dass SNI von Anfang an tatsächlich funktioniert, indem der gesamte Datenverkehr für sich selbst gehortet wird.

Symptome:

  • Es sieht so aus, als würde nginx Ihre Konfiguration nicht laden (auch nicht mit einem nginx -tund einem Service-Reload)
  • Fehler mit der Angabe "Kein SSL-Zertifikat im Serverblock gefunden"
  • nginx wendet Ihren Host nur auf den standardmäßigen 443-Listener an.

Lösungen:

Ich habe das Problem heute Morgen behoben, indem ich den Standard-Serverblock entfernt habe, sodass SNI auf SSL-Listenern übereinstimmen kann.

Eine alternative Lösung wäre, den sslListener und die ssl_certificateLeitungen zum Serverblock hinzuzufügen , sodass SNI im Wesentlichen auf Ihrem Standardhost aktiviert ist. Es werden immer noch SSL-Fehler angezeigt, daher ist dies nicht die beste Lösung, aber Ihr SNI funktioniert trotzdem :)

Reverend Tim
quelle
5

Sie müssen einen einzelnen default_serverParameter in der Nginx-Konfiguration definieren.

Bewerben Sie sich default_serverentweder auf example.com oder www.example.com. Nicht beide.

Daher wird dies funktionieren:

server {
    listen 443 ssl;
    listen 80;

    server_name example.com;
    return 301 https://www.example.com$request_uri;
}

server {
    listen 80 default_server;

    server_name www.example.com;
    return 301 https://www.example.com$request_uri;
}

server {
    listen 443 ssl default_server;

    server_name www.example.com;
    root /var/www/example.com/public;
    index index.php index.html index.nginx-debian.html;

    ssl on;
    ssl_certificate /etc/ssl/chain.crt;
    ssl_certificate_key /etc/ssl/examplecom.key;

    (rest of your nginx config goes here....)
}

Hinweis zu virtuellen Hosts: Stellen Sie sicher, dass der default_serverParameter an keiner anderen Stelle definiert ist - wenn Sie mehrere Hosts auf dem Server haben.

ingo
quelle
very nice ssl on arbeitet für mich
Josua Marcel Chrisano
1

Spät zum Spiel wie immer, aber da es mir geholfen hat ... Überprüfen Sie, ob das Zertifikat fehlerhaft ist. Beim Erstellen der "einheitlichen" CRT (CRT + Intermediate), tun

$cat server.crt provider.intermediate > unified.crt

Ich habe irgendwie eine LF verloren und eine Zeile wie diese bekommen:

-----END CERTIFICATE----------BEGIN CERTIFICATE-----

anstatt

-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----

und nginx würde das Zertifikat nicht annehmen und mit dem oben genannten Fehler versagen.

Tun

# openssl x509 -in unified.cert -text -out

gab mir den hinweis für openssl würde fehler raus.

cucu8
quelle
-1

Überprüfen Sie, ob Ihre Dateiberechtigungen für die Zertifikate korrekt sind. Bitte posten Sie die Verzeichnisliste ( ls -la)

sridhar pandurangiah
quelle