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

Einführung

In diesem Lernprogramm wird das Erstellen eines öffentlichen und privaten ECC-Schlüsselpaars (Elliptic Curve Cryptography) für die Verwendung mit Nginx, einem Hochleistungs-HTTP-Server, veranschaulicht. ECC-Schlüssel bieten einige Vorteile gegenüber herkömmlichen RSA-Schlüsseln. ECC-Schlüssel bieten eine Sicherheit, die der von größeren RSA-Schlüsseln entspricht, sind jedoch kleiner, reduzieren die auf dem Server benötigten Ressourcen und bieten eine schnellere Leistung für mobile Geräte.

Die Verwendung von ECC kann die Leistung für Streaming-Medien, VPN-Verbindungen oder andere Anwendungen mit hoher Bandbreite verbessern. Zertifizierungsstellen (CAs) wie Symantec bieten ab sofort ECC- oder E lliptic C urve C -Ryptografiezertifikate an. Wenn Sie eine Verbindung zu einer Website hergestellt haben, bevor Sie Forward Secrecy oder Perfect Forward Secrecy verwendet haben, haben Sie die Kryptografie mit elliptischen Kurven verwendet! Dieser Leitfaden beschreibt die Schritte, die zur Bereitstellung eines selbstsignierten privaten ECC-Schlüssels und eines öffentlichen Zertifikats mit Nginx auf einem Debian Wheezy-System unter Verwendung der * prime256v1 * -Kurve erforderlich sind.

  • Hinweis: * Es gibt verschiedene Kurven, die Sie verwenden können. Wir verwenden die prime256v1-Kurve, um diesen Artikel einfach zu halten.

Bedarf

  • Tröpfchen mit * Debian 7.0 Wheezy *.

  • OpenSSL installiert und aktualisiert.

Run:

   apt-get update && apt-get upgrade

Nach dem Update ist es eine gute Idee, Ihr Droplet neu zu starten.

  • Ein moderner Browser: Internet Explorer 7+ (Windows Vista, Windows 7), Firefox 19+ (Linux, Mac, Windows) oder Chrome 25+ (Android, Linux, Mac, Windows). In diesem Tutorial verwenden wir Firefox zum Testen.

  • Alle folgenden Befehle sollten als Root-Benutzer ausgeführt werden. *

Schritt 1: Installieren Sie Nginx

Installieren Sie Nginx mit dem apt-get-Paketmanager. Nginx ist ein Hochleistungs-HTTP-Server, der eine große Anzahl von gleichzeitigen Anforderungen verarbeiten kann, ohne viel Speicher auf Ihrem Droplet zu belegen. Zusätzliche Pakete müssen installiert werden. Geben Sie zum Akzeptieren der Installation * Y * ein und drücken Sie dann die * Eingabetaste *.

apt-get install nginx

Schritt 2: Generieren und Signieren eines privaten ECC-Schlüssels

Erstellen Sie ein Verzeichnis zum Speichern des privaten Schlüssels, der Zertifikatsignierungsanforderung und des Serverzertifikats. Ich empfehle das Verzeichnis "+ / etc / nginx / ssl +" anzulegen. Bewegen Sie sich dann in das Verzeichnis.

mkdir /etc/nginx/ssl
cd /etc/nginx/ssl

Generieren Sie einen privaten ECC-Schlüssel mit dem * ecparam * -Tool von OpenSSL. Dieser Befehl generiert einen privaten 256-Bit-Schlüssel unter Verwendung der ECC-Kurve prime256v1 und speichert den Schlüssel in einer Datei mit dem Namen "+ privatekey.key +". Dieser 256-Bit-Schlüssel entspricht einem privaten 2048-Bit-RSA-Schlüssel.

openssl ecparam -out privatekey.key -name prime256v1 -genkey

Verwenden Sie OpenSSL, um eine Zertifikatsignierungsanforderung zu generieren.

openssl req -new -key privatekey.key -out csr.pem

Wenn Sie diesen Befehl ausführen, werden Ihnen einige Fragen gestellt. Geben Sie für die Eingabeaufforderung * Common Name * die IP-Adresse oder den Hostnamen Ihres Servers ein. Geben Sie kein Passwort für die Sicherheitsabfrage an. Alle anderen Felder können nach Belieben mit Informationen gefüllt werden.

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]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:New York
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Digital Ocean Tutorial
Organizational Unit Name (eg, section) []:ECC Certificate Test
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 []:
  • Hinweis: * Zu diesem Zeitpunkt können Sie Ihr Zertifikat zur Signierung bei einer Behörde einreichen. Befolgen Sie die Anweisungen Ihrer Zertifizierungsstelle. Symantec bietet derzeit ECC-Zertifikate an, und es wird erwartet, dass in Zukunft weitere Zertifizierungsstellen ECC-Zertifikate anbieten. Für diesen Leitfaden wird stattdessen ein selbstsigniertes Zertifikat erstellt.

Erstellen Sie ein Zertifikat oder einen öffentlichen Schlüssel. Das Zertifikat wird vom Client zum Verschlüsseln von Daten verwendet, die nur der Server lesen kann. Das OpenSSL x509-Tool wird zum Erstellen eines selbstsignierten Zertifikats mithilfe einer Zertifikatsignierungsanforderung (Certificate Signing Request, CSR) verwendet. Wenn Sie das Zertifikat für einen längeren Zeitraum gültig machen möchten, können Sie den Wert "+ -days +" von 365 auf 3650 ändern und ein Zertifikat mit einer Gültigkeit von 10 Jahren erstellen.

openssl req -x509 -days 365 -key privatekey.key -in csr.pem -out certificate.pem

Stellen Sie die Dateiberechtigungen so ein, dass keine anderen Benutzer Zugriff auf Ihren privaten Schlüssel und Ihr Zertifikat erhalten.

chmod 600 /etc/nginx/ssl/*

Schritt 3: Konfigurieren Sie Nginx mit dem ECC-Schlüssel und dem Zertifikat

Öffnen Sie die standardmäßige Konfiguration des virtuellen Nginx-Hosts mit dem Texteditor Ihrer Wahl. Standardmäßig ist die Konfigurationsdatei des Nginx-Pakets so eingestellt, dass nur HTTP-Anforderungen verarbeitet werden. Jetzt konfigurieren wir Nginx so, dass HTTPS-Anfragen bearbeitet werden.

vi /etc/nginx/sites-enabled/default

Nahe dem Ende der standardmäßigen Konfigurationsdatei für den virtuellen Nginx-Host befindet sich eine Beispielkonfiguration für einen HTTPS-Server mit der Zeile "+ listen 443; +" oben. Kommentieren Sie die Zeilen aus und aktualisieren Sie Ihren HTTPS-Serverblock entsprechend dem unten gezeigten Beispiel. Sie werden die meisten Zeilen bearbeiten, achten Sie also darauf!

  • Wenn Sie Werte ändern, stellen Sie sicher, dass Sie die Semikolons (;) am Ende jeder Zeile belassen. *

#HTTPS server
#
server {
   listen 443;
   server_name ;
#
   root /usr/share/nginx/www;
   index index.html index.htm;
#
   ssl on;
   ssl_certificate /etc/nginx/ssl/certificate.pem;
   ssl_certificate_key /etc/nginx/ssl/privatekey.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 / {
       try_files $uri $uri/ =404;
   }
}

Sobald Ihr HTTPS-Serverblock mit dem obigen Beispiel übereinstimmt, speichern Sie Ihre Änderungen.

Beachten Sie, dass abhängig von der vorhandenen Konfiguration Ihres Cloud-Droplets möglicherweise zusätzliche Änderungen am HTTPS-Serverblock erforderlich sind. Wenn auf Ihrem Cloud-Server beispielsweise PHP ausgeführt wird, möchten Sie die Zeilen, die Sie zu Ihrem HTTP-Block hinzugefügt haben, um PHP zu unterstützen, in Ihren HTTPS-Block kopieren.

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

service nginx restart

Schritt 4: Testen Sie Nginx mit ECC

Wir verwenden Firefox zum Testen, obwohl jeder moderne Webbrowser für den Besuch Ihrer Website und die Verwendung der ECC-Verschlüsselung geeignet ist.

Verwenden Sie Firefox, um zur IP-Adresse oder zum Hostnamen Ihres Cloud-Servers zu navigieren. Nach dem Akzeptieren der selbstsignierten Zertifikatswarnung sollte die Seite "Willkommen bei nginx!" Angezeigt werden. Sie erhalten eine Zertifikatswarnung, da das Zertifikat des Servers selbst signiert und nicht von einer von Ihrem Webbrowser anerkannten Zertifizierungsstelle signiert wurde.

https: // IPORHOSTNAME [https: // IP OR HOSTNAME]

Siehe die erste Warnung unten:

Bild: https://assets.digitalocean.com/articles/ECC_Nginx/1.jpg [Informationen zum Firefox-Zertifikat]

Akzeptieren Sie das Zertifikat.

Wenn Sie Mozilla Firefox verwenden, klicken Sie auf das Vorhängeschloss neben dem Präfix * https: // * in der Adressleiste. Das Fenster mit den Verbindungsinformationen wird angezeigt.

Bild: https://assets.digitalocean.com/articles/ECC_Nginx/2.jpg [Firefox-Verbindungsinformationen]

Klicken Sie auf die Schaltfläche * Weitere Informationen… *. Klicken Sie im neuen Fenster auf der Registerkarte * Sicherheit * auf die Schaltfläche * Zertifikat anzeigen *. Wählen Sie die Registerkarte * Details *. Scrollen Sie nach unten und wählen Sie das Feld * Algorithmusparameter * aus. Im Textbereich * Feldwert * unten sollte Text mit der * elliptischen Kurve prime256v1 * angezeigt werden, der auf ein ECC-Zertifikat hinweist.

Das Feld * Öffentlicher Schlüssel des Betreffs * zeigt eine öffentliche Schlüsselgröße von 256 Bit an.

Herzliche Glückwünsche! Ihr Nginx-Server ist jetzt mit einem privaten ECC-Schlüssel und einem Zertifikat konfiguriert!