Um den zwischen Server und Client übertragenen Datenverkehr zu schützen, kann der Mechanismus der SSL-Verschlüsselung verwendet werden.
Da nginx häufig als Frontend vor Apache fungiert, ist es besser, die Verschlüsselung auf ihn zu übertragen.
Verwendung eines massenhaft selbstsignierten Zertifikats
Wir richten die Verwendung eines einzigen selbstsignierten Zertifikats für mehrere Websites ein.
Erstellen wir eine allgemeine Konfigurationsdatei für SSL:
/etc/nginx/ssl.conf
# Подключение самоподписанного сертификата # генерация сертификата: # openssl req -new -x509 -days 9999 -nodes -out cert.pem -keyout cert.key ssl on; ssl_protocols SSLv3 TLSv1; ssl_certificate /etc/nginx/ssl/cert.pem; ssl_certificate_key /etc/nginx/ssl/cert.key;
Erstellen wir einen Ordner, in dem wir die Zertifikate speichern:
mkdir /etc/nginx/ssl
Um die Sicherheit zu erhöhen, beschränken wir den Zugriff auf die Zertifikate:
chown nginx:nginx /etc/nginx/ssl chmod 700 /etc/nginx/ssl
Wechseln wir in diesen Ordner und generieren das Zertifikat:
cd /etc/nginx/ssl openssl req -new -x509 -days 9999 -nodes -out cert.pem -keyout cert.key
Bei der Generierung werden Sie aufgefordert, einige Daten anzugeben. Da wir das Zertifikat für uns selbst erstellen, ist das Ausfüllen nicht zwingend erforderlich.
Nun verwenden wir die folgende Vorlage, um die Verschlüsselung für die gewünschten Websites zu aktivieren:
in der nginx-Website-Konfiguration:
server {
listen *:443; # порт https
server_name my.site.com; # ваш сайт
include /etc/nginx/ssl.conf; # подключение конфигурации ssl
...
}
Beispiel mit erzwungener Umleitung von HTTP auf HTTPS:
in der nginx-Website-Konfiguration:
server {
listen *:443; # порт https
listen *:80; # порт http
server_name my.site.com; # ваш сайт
include /etc/nginx/ssl.conf; # подключение конфигурации ssl
if ( $scheme = "http" ) {
rewrite ^/(.*)$ https://$host/$1 permanent;
}
}
? или
server {
listen 80;
listen [::]:80;
server_name .domain.com;
rewrite ^ https://domain.com$request_uri? last;
}
Пожалуйста, поправьте, это важно. Вместо last можно использовать permanent или нечто другое, вот все флаги:
last — завершает обработку текущего набора директив ngx_http_rewrite_module, после чего ищется соответствие URI и location;
break — завершает обработку текущего набора директив ngx_http_rewrite_module;
redirect — возвращает временный редирект с кодом 302; используется, если заменяющая строка не начинается с "http://";
permanent — возвращает постоянный редирект с кодом 301.
... }
Nach der Konfiguration muss nginx neu geladen werden:
/etc/init.d/nginx reload
Alles ist bereit. Für den Zugriff auf die Website sollte das HTTPS-Protokoll verwendet werden - https://my.site.com
Da das Zertifikat selbstsigniert ist, wird der Browser auffordern, die Ausnahme für seine Verwendung zu bestätigen.
Zusätzliche Optionen zur Erstellung von SSL-Zertifikaten
Die Erstellung des Zertifikats mit dem Befehl:
openssl req -new -x509 -days 9999 -nodes -out cert.pem -keyout cert.key
fragt einige Informationen zur Erstellung des Zertifikats ab, deren Ausfüllen übersprungen werden kann.
Aber falls Sie interessiert sind, hier ist die Beschreibung der Parameter:
| Wert | Beschreibung | Verpflichtender Parameter? |
|---|---|---|
| C | Zweistelliger Ländercode (Country) | nein |
| ST | Name der Region/Provinz/Krai/Republik/… (State Name) | nein |
| L | Name der Stadt/Siedlung/… (Locality Name) | nein |
| O | Name der Organisation (Organization Name) | nein |
| OU | Name der Abteilung (Organization Unit) | nein |
| CN | Name des Zertifikats; bei der Erstellung von Serverzertifikaten wird der Domainname der Website verwendet (Common Name) | ja |
| emailAddress | E-Mail-Adresse (E-mail address) | nein |
Um diese Parameter nicht interaktiv eingeben zu müssen, kann die Option -subj verwendet werden:
openssl req -new -x509 -days 9999 -nodes -subj /C=RU/O=My\ site/CN=my.site.com/emailAddress=admin@site.com -out cert.pem -keyout cert.key
