SSL steht für „Secure Sockets Layer“, die Standardsicherheitstechnologie, die zum Erstellen einer verschlüsselten Verbindung zwischen einem Webserver und einem Webbrowser dient. Dieser Link stellt sicher, dass alle Informationen, die zwischen dem Server und dem Browser ausgetauscht werden, privat und sicher bleiben. Der Hauptzweck der SSL-Zertifikate besteht darin, die Sicherheit der Website zu gewährleisten und die zwischen dem Client und dem Browser übertragenen Daten zu verschlüsseln, um den Diebstahl sensibler Informationen wie Kreditkartendaten, Kontonummern und Passwörter usw. zu verhindern.
Ein selbstsigniertes Zertifikat ist ein Zertifikat, das von der Person signiert wurde, die es erstellt hat, und nicht von einer vertrauenswürdigen Zertifizierungsstelle (CA). Die meisten Kunden und Organisationen sind versucht, selbstsignierte SSL-Zertifikate anstelle der von einer vertrauenswürdigen Zertifizierungsstelle ausgestellten und verifizierten zu verwenden, hauptsächlich wegen des Kostenunterschieds. Aber es bietet immer noch die gleiche Verschlüsselungsstufe bis zu einem gewissen Grad.
In diesem Artikel erkläre ich, wie man ein selbstsigniertes SSL-Zertifikat auf einem Ubuntu 18.04-Server mit Nginx-Webserver erstellt.
Voraussetzungen
Ein gut konfigurierter Server mit Root-Rechten und OpenSSL-Bibliothek. Die OpenSSL-Bibliothek wird benötigt, um Ihr eigenes Zertifikat zu generieren. Führen Sie den folgenden Befehl auf Ihrem Ubuntu-Server aus, um festzustellen, ob OpenSSL bereits installiert ist.
# which openssl
/usr/bin/openssl
Wenn der which-Befehl die Binärdatei nicht zurückgegeben hat, müssen wir sie mit dem folgenden Befehl installieren:
#apt install openssl
Erstellen des selbstsignierten Zertifikats
SSL besteht hauptsächlich aus zwei Teilen:dem privaten Schlüssel und dem anderen öffentlichen Zertifikat. Der SSL-Schlüssel wird auf dem Server privat gehalten und ist auf den Root-Benutzer beschränkt. Es wird tatsächlich verwendet, um an Clients gesendete Inhalte zu verschlüsseln. Das öffentliche SSL-Zertifikat wird mit jedem geteilt, der den Inhalt anfordert. Es kann verwendet werden, um den mit dem zugehörigen privaten SSL-Schlüssel signierten Inhalt zu entschlüsseln. Hier verwende ich diesen Befehl, um ein selbstsigniertes Zertifikat namens example.com.crt und einen privaten Schlüssel example.com.key (hier verwende ich example.com.pem als Dateinamen) mit dem OpenSSL-Tool zu generieren.
#openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/example.com.key -out /etc/ssl/certs/example.com.pem
Bitte beachten Sie die Details der einzelnen Optionen unten:
- req:Dieser Unterbefehl wird zum Erstellen eines neuen X.509-Zertifikats verwendet. „X.509“ ist ein Infrastrukturstandard für öffentliche Schlüssel, an den sich SSL und TLS für die Schlüssel- und Zertifikatsverwaltung halten.
- -x509:Dies modifiziert den vorherigen Unterbefehl weiter, indem es dem Dienstprogramm mitteilt, dass wir ein selbstsigniertes Zertifikat erstellen möchten.
- -nodes:Dies wird verwendet, um die Passphrase-Option zu überspringen, um unser Zertifikat zu sichern.
- -Tage 365:Diese Option legt die Gültigkeit des Zertifikats in Tagen fest. Wir stellen es hier auf ein Jahr ein.
- -newkey rsa:2048:Dies gibt an, dass wir zusammen mit dem Zertifikat einen neuen RSA-Schlüssel mit 2048 Bit Länge generieren möchten.
- -keyout:Diese Option teilt OpenSSL mit, wo die generierte private Schlüsseldatei abgelegt werden soll.
- -out:Diese Option teilt OpenSSL mit, wo das generierte Zertifikat platziert werden soll.
Während dieser Befehlsausführung werden wir aufgefordert, die Domänen-/Client-Details zum Generieren einer Certificate Signing Request (CSR) anzugeben. Sie können diese Details nach Bedarf angeben.
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:Victoria
Locality Name (eg, city) []:Melbourne
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Linoxide LLC
Organizational Unit Name (eg, section) []:Web
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:[email protected]
Jetzt haben wir unser neu generiertes selbstsigniertes Zertifikat und den privaten Schlüssel an diesen Orten, nämlich:/etc/ssl/certs/example.com.pem
und /etc/ssl/private/example.com.key
. Als nächstes sollten wir eine starke Diffie-Hellman-Gruppe bilden, die bei der Aushandlung von Perfect Forward Secrecy mit Kunden eingesetzt wird. Sie können diesen Befehl ausführen, um einen zu erstellen.
#openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Dies kann einige Zeit in Anspruch nehmen, aber wenn es fertig ist, werden wir eine starke DH-Gruppe unter /etc/ssl/certs/dhparam.pem
haben die wir in unserer Konfiguration verwenden können.
Konfigurieren von Nginx für die Verwendung von selbstsignierten Zertifikaten
Bevor wir beginnen, müssen wir sicherstellen, dass der Nginx-Webserver auf unserem Ubuntu 18.04-Server installiert ist. Wenn es nicht installiert ist, können Sie es mit diesem einfachen Befehl installieren:
#apt install nginx
Ich habe diesen Dienst auf meinem Server installiert und aktiviert.
# nginx -v
nginx version: nginx/1.14.0 (Ubuntu)
#systemctl enable nginx
#systemctl start nginx
#systemctl status nginx
Nächste. Wir können Nginx für die Verwendung von SSL konfigurieren. Ich erkläre das in drei Schritten:
- Erstellen einer Snippet-Konfiguration mit den generierten SSL-Zertifikatsdetails.
- Erstellen einer Snippet-Konfiguration zum Aufrechterhalten starker und sicherer SSL-Einstellungen, die mögliche SSL-Schwachstellen überwinden.
- Aktualisieren des virtuellen Domänenhosts mit den obigen Snippet-Konfigurationen, um SSL zu aktivieren
Schritt 1:Erstellen einer Snippet-Konfiguration mit den SSL-Zertifikatsdetails
Lassen Sie uns eine neue Snippet-Konfigurationsdatei namens „self-signed.conf“ erstellen, um auf unsere generierten selbstsignierten Zertifikatsdetails im Nginx-Snippet-Ordner zu verweisen:/etc/nginx/snippets/
wie unten:
# cat /etc/nginx/snippets/self-signed.conf
# Self signed certificates generated by the ssl-cert package
# Don't use them in a production server!
ssl_certificate /etc/ssl/certs/example.com.pem;
ssl_certificate_key /etc/ssl/private/example.com.key;
Hier müssen wir unseren generierten Zertifikatspfad angeben:/etc/ssl/certs/example.com.pem
und Schlüsselpfad:/etc/ssl/private/example.com.key
für die oben erwähnte Richtlinie.
Schritt 2:Erstellen einer Snippet-Konfiguration zum Aufrechterhalten starker und sicherer SSL-Einstellungen zum Überwinden möglicher SSL-Schwachstellen
Zweitens müssen wir eine voll funktionsfähige und starke SSL-Serverkonfiguration aufrechterhalten, die unseren Server vor allen möglichen SSL-Schwachstellen schützt. Ich habe mein Nginx mit einer starken SSL-Verschlüsselungssuite konfiguriert und einige erweiterte Funktionen aktiviert, um die Serversicherheit zu gewährleisten. Alle diese Parameter sind in der Datei enthalten:/etc/nginx/snippets/ssl-params.conf
cat /etc/nginx/snippets/ssl-params.conf
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling off;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
Sie finden diese Nginx-Cipher-Empfehlungen in der Cipher-Liste. Diese Parameter werden in zukünftigen Nginx-Konfigurationen für SSL verwendet. Wie Sie sehen können, haben wir den ssl_dhparam
gesetzt auf die zuvor hier generierte Diffie-Hellman-Datei verweisen. Da wir ein selbstsigniertes Zertifikat verwenden, ist das SSL stapling
wird nicht verwendet. Daher habe ich es off
andernfalls gibt Nginx einfach eine Warnung wie diese aus nginx: [warn] "ssl_stapling" ignored, issuer certificate not found for certificate
. Nachdem Sie diese Änderungen vorgenommen haben, können Sie die Konfiguration speichern und beenden.
Schritt 3:Aktualisieren des virtuellen Domänenhosts mit den obigen Snippet-Konfigurationen, um SSL zu aktivieren
Wir sind mit unserer erforderlichen Snippet-Konfiguration fertig, jetzt können wir diese in unseren virtuellen Domain-Host aufnehmen und SSL aktivieren. Hier in diesem Artikel verwende ich die standardmäßige Nginx-Konfigurationsdatei, die sich unter /etc/nginx/sites-available/default
befindet . Ich habe diese Datei geändert, um SSL zu aktivieren und die generierten selbstsignierten Zertifikate abzurufen. Bitte beachten Sie den geänderten Abschnitt unten in dieser Konfiguration:
cat /etc/nginx/sites-available/default
#
server {
listen 80 default_server;
listen [::]:80 default_server;
# SSL configuration
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
include snippets/self-signed.conf;
include snippets/ssl-params.conf;
Jetzt können wir diese Konfigurationen speichern und den Nginx-Dienst neu starten, damit diese Änderungen wirksam werden.
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
#systemctl restart nginx
Testen
Dies ist unser letzter Schritt, in dem wir unseren Browser öffnen und versuchen können, auf unsere Server-IP unter der URL>> https://Server_IP or Hostname
zuzugreifen . Es wird eine Sicherheitswarnung angezeigt, da wir ein selbstsigniertes Zertifikat verwenden. Sie können diese Warnung ignorieren und auf klicken, um die Sicherheit zu bestätigen, um fortzufahren, wie im Schnappschuss gezeigt.
Lesen Sie auch:
- Mkcert - Erstellen Sie SSL-Zertifikate für die lokale Entwicklung unter Linux
- So installieren Sie SSL-Zertifikate von Let's Encrypt auf Ubuntu 18.04
- So richten Sie NGINX als Reverse Proxy mit Docker ein
Das ist alles! Wir haben Nginx erfolgreich mit einem selbstsignierten Zertifikat unter Verwendung starker Verschlüsselungsmethoden für sichere Clientverbindungen konfiguriert. Ich hoffe, dieser Artikel ist nützlich für Sie! Bitte posten Sie Ihre wertvollen Kommentare und Vorschläge dazu.