GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

So erstellen Sie ein selbstsigniertes SSL-Zertifikat für Nginx unter Ubuntu 18.04

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:

  1. Erstellen einer Snippet-Konfiguration mit den generierten SSL-Zertifikatsdetails.
  2. Erstellen einer Snippet-Konfiguration zum Aufrechterhalten starker und sicherer SSL-Einstellungen, die mögliche SSL-Schwachstellen überwinden.
  3. 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.


Ubuntu
  1. So installieren Sie ein selbstsigniertes SSL-Zertifikat in cPanel

  2. So erstellen Sie ein bootfähiges Ubuntu-USB-Laufwerk für Mac in OS X

  3. Wie kann man Apache 2 dazu bringen, nicht mehr nach einem Passwort für ein SSL-Zertifikat zu fragen?

  4. Wie füge ich ein SSL-Client-Zertifikat / einen Schlüssel global in Ubuntu hinzu?

  5. So erstellen Sie ein selbstsigniertes SSL-Zertifikat unter Ubuntu 18.04

So richten Sie das Let’s Encrypt SSL-Zertifikat mit Nginx unter Ubuntu 18.04 und Ubuntu 16.04 ein

So generieren Sie eine Zertifikatssignierungsanforderung (CSR) unter Ubuntu

So installieren Sie ein kostenloses SSL-Zertifikat für Nginx unter CentOS 8

So installieren Sie Let’s Encrypt SSL für Nginx unter Ubuntu 18.04 LTS

So erstellen Sie ein lokales selbstsigniertes SSL-Zertifikat unter CentOS 8

Wie aktiviere ich die Alt-Gr-Taste als Alt-R für Emacs unter Ubuntu 16.04?