So erstellen Sie ein ECC-Zertifikat auf Nginx für Debian 8

Einführung

In diesem Artikel wird erläutert, wie Sie ein ECC-SSL-Zertifikat (Elliptic Curve Cryptography) für Nginx erstellen. Am Ende dieses Lernprogramms steht Ihnen ein schnellerer Verschlüsselungsmechanismus für den produktiven Einsatz zur Verfügung.

Die herkömmliche Kryptographie mit öffentlichen Schlüsseln beruht auf der Tatsache, dass es nahezu unmöglich ist, große ganze Zahlen zu berücksichtigen. Andererseits beruht ECC auf der Unmöglichkeit, elliptische Zufallskurven in diskrete logarithmische Funktionen aufzulösen, ein Problem, das als "Diskreter Logarithmus der elliptischen Kurve" oder ECDLP bezeichnet wird. Kurz gesagt, ECC bietet kleinere Schlüssel mit ähnlicher Sicherheit, was wiederum zu einer höheren Verschlüsselungsleistung führt, die für digitale Signaturen wie SSL gilt.

Dieses Lernprogramm und alle ECC-Zertifikate hängen von einem elliptic-curve-Protokoll ab, das in verschiedenen Varianten vorliegen kann. Das Nationale Institut für Standards und Technologie (NIST) Suite B gibt zwei mögliche elliptische Kurven für die Verwendung an, P-256 und P-384, auch bekannt als prime256v1 und secp384r1. Der Einfachheit halber verwenden wir das erste, prime256v1, da es einfach, aber praktisch ist.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie:

  • Ein neues Debian 8.1-Droplet

  • Ein sudo-Benutzer ohne Rootberechtigung, den Sie einrichten können, indem Sie die Schritte 2 und 3 unter this tutorial ausführen.

  • OpenSSL installiert und aktualisiert

Zum Testen benötigen Sie eines von zwei Systemen, auf denen OpenSSL installiert und aktualisiert ist:

  • Ein weiteres Linux-Droplet

  • Linux-basiertes lokales System (Mac, Ubuntu, Debian usw.)

Schritt 1 - Installieren Sie Nginx

In diesem Schritt verwenden wir ein eingebautes Paketinstallationsprogramm mit dem Namen "+ apt-get". Es vereinfacht die Verwaltung drastisch und erleichtert eine saubere Installation.

Unter dem in den Voraussetzungen angegebenen Link sollten Sie "+ apt-get " aktualisiert und das Paket " sudo " installiert haben, da Debian 8 im Gegensatz zu anderen Linux-Distributionen nicht mit " sudo +" geliefert wird.

Nginx ist der vorgenannte HTTP-Server, der sich auf die Verarbeitung großer Lasten bei geringer Speichernutzung konzentriert. Führen Sie zum Installieren Folgendes aus:

sudo apt-get install nginx

Informationen zu den Unterschieden zwischen Nginx und Apache2, den beiden beliebtesten Open-Source-Webservern, finden Sie unter this article.

Schritt 2 - Verzeichnis erstellen

Dieser Abschnitt ist einfach und kurz. Wir müssen den privaten Schlüssel und das Zertifikat an einem denkwürdigen Ort speichern, also müssen wir ein neues Verzeichnis erstellen.

sudo mkdir /etc/nginx/ssl

Schritt 3 - Erstellen Sie ein selbstsigniertes ECC-Zertifikat

In diesem Abschnitt fordern wir ein neues Zertifikat an und unterschreiben es.

Generieren Sie zunächst einen privaten ECC-Schlüssel mit dem OpenSSL-Tool "+ ecparam +".

  • Das + out + Flag leitet die Ausgabe in eine Datei. In diesem Tutorial speichern wir den Schlüssel in + / etc / nginx / ssl / +.

  • Das "+ name " -Flag kennzeichnet die elliptische Kurve " prime256v1 +".

sudo openssl ecparam -out /etc/nginx/ssl/ -name prime256v1 -genkey

Generieren Sie dann eine Zertifikatsignierungsanforderung.

  • Das + key + Flag gibt den Pfad zu unserem Schlüssel an, der im vorherigen Befehl generiert wurde.

  • Das "+ out +" - Flag gibt den Pfad zu unserem generierten Zertifikat an.

sudo openssl req -new -key /etc/nginx/ssl/ -out /etc/nginx/ssl/

Das Aufrufen dieses Befehls führt zu einer Reihe von Eingabeaufforderungen.

  • * Common Name *: Geben Sie die IP-Adresse oder den Hostnamen Ihres Servers an.

  • * Passwort abfragen *: Geben Sie kein Passwort an.

  • Füllen Sie alle anderen Felder nach eigenem Ermessen aus. Drücken Sie + ENTER +, um die Standardeinstellungen zu übernehmen.

You are about to be asked to enter information that will be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:

Please enter the following 'extra' attributes to be sent with your certificate request
A challenge password []:
An optional company name []:

Zum Schluss signieren Sie das Zertifikat selbst. Das Zertifikat wird dann vom Client verwendet, um Daten zu verschlüsseln, die nur der Server lesen kann.

  • + x509 + ist das OpenSSL-Tool, mit dem das Zertifikat generiert wird.

  • Das Flag "+ Tage +" gibt an, wie lange das Zertifikat gültig sein soll. In diesem Beispiel ist das Zertifikat ein Jahr gültig.

  • + in + gibt unsere zuvor generierte Zertifikatsanforderung an.

sudo openssl req -x509 -nodes -days  -key /etc/nginx/ssl/ -in /etc/nginx/ssl/ -out /etc/nginx/ssl/

Legen Sie die Dateiberechtigungen fest, um Ihren privaten Schlüssel und Ihr Zertifikat zu schützen. Weitere Informationen zum dreistelligen Berechtigungscode finden Sie im Tutorial unter https://www.digitalocean.com/community/tutorials/linux-permissions-basics-and-how-to-use-umask-on-a-vps [Linux-Berechtigungen].

sudo chmod 600 /etc/nginx/ssl/*

Ihr Zertifikat und der private Schlüssel, der es schützt, können jetzt eingerichtet werden.

Schritt 4 - Richten Sie das Zertifikat ein

In diesem Abschnitt werden wir die virtuellen Nginx-Hosts mit dem Schlüssel und dem Zertifikat konfigurieren. Tatsächlich beginnt unser Server, HTTPS anstelle von HTTP-Anforderungen zu verarbeiten.

Öffnen Sie die Serverkonfigurationsdatei mit nano oder Ihrem bevorzugten Texteditor.

sudo nano /etc/nginx/sites-enabled/default

Oben in der Konfigurationsdatei finden Sie einen Codeblock, der etwa wie folgt aussieht:

/ etc / nginx / sites-enabled / default

...
# Default server configuration
#
server {
...
}

Die nächsten Änderungen werden im + server + Block vorgenommen.

  1. Kommentieren Sie zunächst die ersten beiden Zeilen des Blocks "+ server +" aus, indem Sie der Zeile ein Nummernzeichen voranstellen:

etc / nginx / sites-enabled / default

server {
   # listen 80 default_server;
   # listen [::]:80 default_server;
  1. Entfernen Sie dann das Kommentarzeichen in der ersten Zeile "+ Listen" unter "+ SSL Configuration" (SSL-Konfiguration), indem Sie das Nummernzeichen entfernen. Richtig einrücken und auch "+ ssl default_server +" entfernen.

/ etc / nginx / sites-enabled / default

   # SSL Configuration
   #
   listen 443;
   # listen [::]:443 ssl default_server;
   #
  1. Aktualisieren Sie das Stammverzeichnis direkt unter dem kommentierten Block. Das Original lautet "+ Servername _; ". Ändern Sie es so, dass es Ihre Server-IP-Adresse enthält, sodass " Servername +" angezeigt wird.

  2. Fügen Sie nach "+ Servername +" Ihren SSL-Schlüssel und Ihre Zertifikatspfade hinzu.

/ etc / nginx / sites-enabled / default

       ssl on;
       ssl_certificate /etc/nginx/ssl/.pem;
       ssl_certificate_key /etc/nginx/ssl/.key;
  1. Schließlich fügen Sie SSL-Einstellungen hinzu.

/ etc / nginx / sites-enabled / default

       ssl_session_timeout 5m;
       ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
       ssl_ciphers HIGH+kEECDH+AESGCM:HIGH+kEECDH:HIGH+kEDH:HIGH:!aNULL;
       ssl_prefer_server_ciphers on;

Ihr Endergebnis sollte mit dem folgenden identisch sein.

/ etc / nginx / sites-enabled / default

# Default server configuration
#
server {
       # listen 80 default_server;
       # listen [::]:80 default_server;

       # SSL configuration
       #
       listen 443;
       # listen [::]:443 ssl default_server;
       #
       # Self signed certs generated by the ssl-cert package
       # Don't use them in a production server!
       #
       # include snippets/snakeoil.conf;

       root /var/www/html;

       # Add index.php to the list if you are using PHP
       index index.html index.htm index.nginx-debian.html;

       server_name ;

       ssl on;
      ssl_certificate /etc/nginx/ssl/.pem;
      ssl_certificate_key /etc/nginx/ssl/.key;
      ssl_session_timeout 5m;
      ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
      ssl_ciphers HIGH+kEECDH+AESGCM:HIGH+kEECDH:HIGH+kEDH:HIGH:!aNULL;
      ssl_prefer_server_ciphers on;

       location / {
               # First attempt to serve request as file, then
               # as directory, then fall back to displaying a 404.
               try_files $uri $uri/ =404;
       }

Sobald diese Änderungen vorgenommen wurden, speichern und schließen Sie die Datei.

Starten Sie Nginx neu, um die Änderungen zu übernehmen.

sudo service nginx restart

Schritt 5 - Testen Sie Nginx mit ECC

In diesem Abschnitt testen wir den Server über die Befehlszeile. Dies kann wiederum entweder auf (1) Ihrem lokalen Linux-basierten System oder (2) einem anderen Droplet erfolgen. Sie können diesen Befehl auch über dasselbe Shell-Fenster ausführen, möchten aber möglicherweise einen zuverlässigeren Erfolgsnachweis.

Verbindung über den HTTPS 443-Port öffnen.

+ openssl s_client -connect: 443 +

Scrollen Sie nach der Tastenausgabe zur Mitte der Ausgabe, und Sie sollten Folgendes finden:

output---
SSL handshake has read 3999 bytes and written 444 bytes
---
...
SSL-Session:
...

Natürlich sind die Zahlen variabel, aber das ist Erfolg. Herzliche Glückwünsche!

Drücken Sie zum Beenden die Tastenkombination STRG + C +.

Sie können Ihre Site auch in einem Webbrowser besuchen, indem Sie HTTPS in der URL verwenden (+ https: // example.com +). Ihr Browser warnt Sie, dass das Zertifikat selbst signiert ist. Sie sollten in der Lage sein, das Zertifikat anzuzeigen und zu bestätigen, dass die Details mit den in Schritt 4 eingegebenen übereinstimmen.

Fazit

Dies schließt unser Tutorial ab und lässt Sie mit einem funktionierenden Nginx-Server zurück, der sicher mit einem ECC-Zertifikat konfiguriert ist. Weitere Informationen zum Arbeiten mit OpenSSL finden Sie unter des OpenSSL Essentials-Artikels.