Crmgo Blog

Konfiguration von SSL (HTTPS) in Nginx

Konfiguration von SSL (HTTPS) in Nginx

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 sinnvoller, die Verschlüsselung auf ihn zu übertragen. Verwendung eines massenhaft selbstsignierten Zertifikats Wir richten die Verwendung eines einzigen selbstsignierten Zertifikats für mehrere…

Konfiguration von SSL (HTTPS) in Nginx

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


Hinweis: Dieser Beitrag kann KI-unterstützt erstellt und anschließend redaktionell geprüft worden sein. Verantwortlich: Dmytro Lomaka, Kaltenkirchen.