Heim  >  Artikel  >  Betrieb und Instandhaltung  >  SNI-basierte SSL-Lösung im Nginx-Reverse-Proxy

SNI-basierte SSL-Lösung im Nginx-Reverse-Proxy

王林
王林Original
2023-06-10 21:57:152401Durchsuche

SNI-basierte SSL-Lösung im Nginx-Reverse-Proxy

Mit der Entwicklung der Internettechnologie haben die Sicherheitsprobleme von Webanwendungen immer mehr Aufmerksamkeit erhalten. SSL-Zertifikate sind als Verschlüsselungstechnologie, die Sicherheit bei der Datenübertragung bietet, zu einem wichtigen Mittel zum Schutz von Webanwendungen geworden. In einigen Sonderfällen müssen mehrere SSL-Zertifikate auf demselben Server bereitgestellt werden. Je nach Bedarf entstehen derzeit SNI-basierte SSL-Lösungen.

1. Was ist SNI (Server Name Indication)?

SNI ist ein TLS-Erweiterungsprotokoll, das es dem Client ermöglicht, beim Aufbau einer SSL-Verbindung erweiterte Felder einzufügen, um dem Server mitzuteilen, dass der Client dies wünscht verbinden. Auf einer einzelnen IP-Adresse und einem einzigen Port können mehrere Domänennamen gleichzeitig unterschiedliche SSL-Zertifikate verwenden.

Allerdings wird SNI nicht von allen Browsern und Servern unterstützt. Bei der Verwendung von SNI müssen Sie sicherstellen, dass Client und Server dieselbe SSL-Protokollversion unterstützen und der Client SNI-Erweiterungen unterstützen muss. Derzeit häufig verwendete Browser wie Chrome, Firefox, IE7 und höher, Opera usw. unterstützen alle SNI.

2. Nginx-Reverse-Proxy und SSL

Nginx ist ein Hochleistungs-Webserver und unterstützt Reverse-Proxy. Ein Reverse-Proxy ist eine Informationssicherheitstechnologie, die Anfragen an einen anderen Server sendet und die Antwort an den Anforderer zurücksendet. Reverse-Proxy-Server ermöglichen außerdem Lastausgleich und SSL-Verschlüsselung.

Der Reverse-Proxy-Server fungiert als mittlere Schicht für die Kommunikation mit dem Front-End-Webserver und dem Back-End. Nginx unterstützt zwei Dienstmodi: http und https. Bei der Nutzung von https-Diensten ist eine SSL-Verschlüsselung und -Entschlüsselung erforderlich.

Die SSL-Unterstützung von Nginx verfügt über zwei Modi: den Einzel-SSL-Zertifikatsmodus und den SNI-basierten Mehrfachzertifikatsmodus. Im Einzel-SSL-Zertifikatmodus kann nur ein SSL-Zertifikat verwendet werden, d. h. es können nicht unterschiedliche SSL-Zertifikate für unterschiedliche Domänennamen verwendet werden. Im auf SNI basierenden Multi-Zertifikat-Modus kann eine SSL-verschlüsselte Übertragung mit mehreren Domänen erreicht werden.

3. SNI-basierte SSL-Lösung

  1. SSL-Zertifikat generieren

Zuerst müssen Sie ein SSL-Zertifikat beantragen und die entsprechende Zertifikatskette und den privaten Schlüssel generieren. Hier wird davon ausgegangen, dass wir zwei Domainnamen abc.com und xyz.com verwenden und jeweils zwei Zertifikate generieren möchten.

Zertifikat generieren:

openssl req -newkey rsa:2048 -nodes -keyout abc.com.key -out abc.com.csr
openssl x509 -req -days 365 -in abc.com.csr -signkey abc.com .key -out abc.com.crt

openssl req -newkey rsa:2048 -nodes -keyout xyz.com.key -out xyz.com.csr
openssl x509 -req -days 365 -in xyz.com.csr - signkey xyz.com.key -out xyz.com.crt

Zertifikatkette generieren:

cat abc.com.crt domain.crt > abc.com-bundle.crt
cat xyz.com.crt domain.crt > ;

ssl_session_timeout 10m;
  1. # SSL-Zertifikat konfigurieren
  2. server {
listen 443 ssl;
server_name abc.com;
ssl_certificate /path/to/abc.com-bundle.crt;
ssl_certificate_key /path/to/abc.com.key;

}

server {

listen 443 ssl;
server_name xyz.com;
ssl_certificate /path/to/xyz.com-bundle.crt;
ssl_certificate_key /path/to/xyz.com.key;

}
}

Geben Sie ssl_certificate und ssl_certificate_key in der Konfigurationsdatei an, um unterschiedliche SSL zu verwenden Zertifikate bzw. Gleichzeitig muss für jeden Domainnamen ein Serverblock konfiguriert werden.


Konfiguration überprüfen

Nach dem Neustart von Nginx können Sie überprüfen, ob die Konfiguration wirksam wird. Geben Sie abc.com und xyz.com in den Browser ein. Der Browser sendet während der TLS-Handshake-Phase eine SNI-Anfrage und gibt das entsprechende SSL-Zertifikat zurück. Wenn die Anfrage normal zurückgegeben wird, ist dies ein Beweis dafür, dass die SNI-basierte SSL-Lösung wirksam geworden ist.

4. Zusammenfassung

Die SNI-basierte SSL-Lösung kann mehrere SSL-Zertifikate auf demselben Server bereitstellen, was für Szenarien geeignet ist, die die Verwendung einer Multi-Domain-SSL-Verschlüsselung erfordern. Es ist jedoch zu beachten, dass SNI nicht von allen Browsern und Servern unterstützt wird. Sie müssen daher sicherstellen, dass Client und Server bei der Verwendung dieselbe SSL-Protokollversion unterstützen, und der Client muss die SNI-Erweiterung unterstützen. Während des Konfigurationsprozesses müssen Sie für jeden Domänennamen einen Serverblock konfigurieren und das entsprechende SSL-Zertifikat und den privaten Schlüssel angeben.

Das obige ist der detaillierte Inhalt vonSNI-basierte SSL-Lösung im Nginx-Reverse-Proxy. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn