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
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 > ;
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;
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
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!