fragen stichworte

Lassen Sie unbekannte Servernamen über HTTPS von Nginx zurückweisen

Ich habe eine Nginx-Instanz, die SNI verwendet, um mehrere HTTPS-Domänen von einer einzigen IP zu bedienen.

Der einzige Fehler beim Setup besteht darin, dass Nginx mit der ersten Domäne (die als Standardfunktion fungiert) antwortet, wenn eine URL für die bloße IP-Adresse des Servers oder eine Domäne angegeben wird, für die kein HTTPS-Serverblock vorhanden ist. wird angefordert. In diesem Fall würde ich es vorziehen, einfach einen Standard 403 Forbidden zurückzugeben - ich würde einen Standard-Serverblock einrichten, um dies zu tun, aber ich sehe keinen Weg, um die Warnungen von Clientzertifikaten zu stimmen.

(Wie c | C) und ich konfiguriere Nginx so, dass Anfragen an solche unbekannten/undefinierten Domänen abgelehnt werden, ohne dass ein bestimmtes SSL-Zertifikat angegeben werden muss, das die Browser stört. (Das heißt, Nginx muss die Anforderung mit einem 403 ablehnen, bevor der Client mit einem "bad" -Zertifikat verärgert wird. Vom POV des Clients sollte dies identisch sein mit dem Fall, dass überhaupt kein HTTPS-Serverblock definiert ist.)

antworten

Diese Frage ist der Frage, die ich gestern geantwortet habe, sehr ähnlich: nginx und SNI: Ist es möglich, das SSL-Zertifikat nach Domänennamen

automatisch aufzulösen

Es ist nicht möglich, die Verbindung abzulehnen, bevor der Benutzer eine fehlerhafte Zertifikatsnachricht in seinem Browser sieht. Wenn Nginx möglicherweise eine HTTP 403-Antwort zurücksendet, ist der SSL-Handshake beendet und zum Abschluss des Handshakes muss der Browser das bereitgestellte Zertifikat akzeptieren. Sie können die Verbindung erst dann ablehnen, wenn der Benutzer das Zertifikat akzeptiert hat, indem Sie einen Standardserver einrichten:

server {
    listen 433 default_server ssl;
    ssl_certificate       common.crt;
    ssl_certificate_key   common.key;
    return 403;
}

Die meisten Browser unterstützen jedoch die Angabe des Servernamens. Wenn Sie für jeden vhost ein Zertifikat festgelegt haben, ist es unwahrscheinlich, dass ein normaler Benutzer diese Nachricht sieht.

Es ist möglicherweise möglich, Verbindungen ohne gültigen, von SSL angegebenen Hostnamen mit iptables abzulehnen, aber das ist wahrscheinlich ziemlich kompliziert und würde keinerlei Standards erfüllen.

Aktualisierte Informationen: Es ist möglich, die TCP-Verbindung return 444 sofort abzubrechen, bevor ein Zertifikatfehler angezeigt wird.

Wenn Ihre Domains Unterdomänen desselben Masters (* .example.com) sind, können Sie ein Platzhalterzertifikat verwenden. Wenn dies nicht gelingt, glaube ich nicht, dass Sie jedes Zertifikat angeben können, mit dem der Browser zufrieden ist.