Signieren von eigenen SSL-Zertifikaten erfolgt in der Regel als eine einfache alternative zu Zertifizierungsstellen, die für die interne Kommunikation oder nicht-Benutzer vor Websites, die müssen immer noch die Verschlüsselung. Hier erfahren Sie, wie einrichten mit Apache.
Erzeugen und Selbst Signieren eines SSL-Zertifikats
Wir nutzen die openssl-Dienstprogramm zum generieren des Zertifikats und des entsprechenden private key. Sie wahrscheinlich haben Sie diese bereits installiert, da es eine Abhängigkeit von Apache, aber wenn es irgendwie fehlt, können Sie es von Ihrer Distribution Paket-manager. Für Debian-basierte Systeme wie Ubuntu, das wäre:
sudo apt-get install openssl
Nach dem openssl installiert ist, können Sie das Zertifikat generieren Sie mit dem folgenden Befehl:
sudo openssl req -x509 -nodes-days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache.key -out /etc/ssl/certs/apache.crt
openssl wird Sie bitten, ein paar Informationen über Ihre Organisation. Sie können lassen die meisten von dieser leere, aber die eine wichtige Sache, die müssen Sie ausfüllen, ist der “Common Name”, die Sie festlegen möchten, um Ihre server-IP-Adresse oder den domain-Namen.
Country Name (2 letter code) []:
State or Province Name (full name) []:
Locality Name (eg, city) []:
Organization Name (eg, company) []:
Organizational Unit Name (eg, section) []:
Common Name (eg, vollständig qualifizierte host-name) []: your_ip_address
E-Mail-Adresse []:
openssl wird eine zweite zu laufen und erzeugen eines neuen privaten RSA-Schlüssel, der verwendet wird, um das Zertifikat zu signieren und speichern es in /etc/ssl/private/apache.Schlüssel. Das Zertifikat selbst ist gespeichert in /etc/ssl/certs/apache.crt, und gilt für ein Jahr.
Wir wollen auch zum generieren eines Diffie-Hellman-Gruppe. Das ist für die perfect forward secrecy, das erzeugt kurzlebige Schlüssel (session keys), um sicherzustellen, dass die vergangene Kommunikation kann nicht entschlüsselt werden, wenn der session-key kompromittiert wird. Dies ist nicht ganz notwendig für die interne Kommunikation, aber wenn Sie wollen, um so sicher wie möglich zu gestalten, sollten Sie nicht überspringen Sie diesen Schritt. Beachten Sie, dass dies bedeutet, müssen Sie die Apache-version 2.4.8 oder höher, so stellen Sie sicher, Sie sind up to date.
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
Dies dauert eine Weile—etwa eine Stunde-je nachdem, wie schnell Ihr server ist. Schnappen Sie sich etwas zu Essen, und kommen zurück, um Ihr terminal in ein bit zu konfigurieren Apache.
Konfigurieren Sie Apache Verwenden Sie Ihre Selbst-Signiertes Zertifikat
, Dinge einfach zu machen, wir werden alles tun, unsere Konfiguration in eine snippet-Datei. Erstellen Sie eine neue Apache sites-available-Verzeichnis:
sudo touch /etc/apache2/conf-available/ssl-Parameter.conf
Öffnen Sie es in Ihrem Lieblings-text-editor, und fügen Sie die folgende Konfiguration:
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All-SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder Auf
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
SSLCompression aus
SSLUseStapling auf
SSLStaplingCache “shmcb:Protokolle/Heften-cache(150000)”
SSLSessionTickets Aus
SSLOpenSSLConfCmd DHParameters “/etc/ssl/certs/dhparam.pem”
Der erste block setzt einige default-SSL-Parameter, und die Letzte Zeile konfiguriert den Apache zu verwenden das Diffie-Hellman-Gruppe. Können Sie weglassen dieser Zeile, wenn Sie diesen Schritt übersprungen.
Nächste, öffnen Sie die standardmäßige SSL Virtueller Host-Datei befindet sich normalerweise unter /etc/apache2/sites-available/default-ssl.conf. Ändern Sie die folgenden Zeilen zeigen, um Ihr Zertifikat und den-Schlüssel-Datei:
SSLCertificateFile /etc/ssl/certs/apache.crt
SSLCertificateKeyFile /etc/ssl/private/apache.Schlüssel
SSL sollte nun funktionieren, aber Sie werden wahrscheinlich brauchen, um Kopie über einige Konfiguration von der aktuellen Konfiguration-Datei, weil Sie gerade geändert leere. Sie haben zu stellen Sie sicher, dass der ServerName , ServerAdmin , und DocumentRoot-Richtlinien verweisen auf die richtigen stellen.
Zusätzlich, Sie werden wollen eine Weiterleitung einrichten, weiterleiten von HTTP-traffic über den verschlüsselten HTTPS. Öffnen Sie die Standard-Apache-config in /etc/apache2/apache2.conf , und fügen Sie die folgenden Zeilen umschreiben HTTP-Verkehr:
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.yourdomain.com/$1 [R,L]
Sie wollen auch sicherstellen, dass Ihre firewall geöffnet ist. HTTPS nutzt port 443 statt port 80, so dass Sie brauchen werden, um diesen zu öffnen, um eine Verbindung zum server herstellen. Wenn du mit iptables oder UFW, können Sie offene ports von der Kommandozeile aus. Wenn Sie das hosting Ihrer server auf einem Dienst wie AWS, Ihr provider kann Ihnen eine web-Schnittstelle zum öffnen von ports aus.
Selbst-signierte Zertifikate sind die am häufigsten verwendeten privaten Servern, so dass es nicht eine schlechte Idee, auf die whitelist nur Zugriff auf Ihre privaten LAN und über VPN-server zu verbinden.
Sobald die ports offen sind, können Sie testen Sie Ihre SSL-Einstellungen, indem Sie die Navigation, um Ihre Website in Ihrem browser. Wenn alles richtig geklappt hat, sollten Sie diese Warnung sehen:
Das ist normal, also keine Sorge. Sie haben manuell ausgewählt, dass Sie Vertrauen Sie diesem Zertifikat, das ist der Grund, warum Sie nicht verwenden können, self-signed certs für öffentlich zugängliche Websites.
Die Warnung bedeutet nicht, dass Ihre Website ist unsicher—SSL ist immer noch aktiviert und die Verschlüsselung des Datenverkehrs. Wenn Ihr privater Schlüssel kompromittiert ist, kann die Kommunikation konnte nicht entschlüsselt werden, aber es wird absolut sicher, wenn Sie die Diffie-Hellman forward secrecy, die verhindert, dass Angriffs-Vektor. Das problem ist hier mit Identität. Chrome kann nicht stellen Sie sicher, dass Sie sind, wer Sie sagen, Sie sind oder dass Sie die Domäne besitzen, die Sie benötigen eine “echte” CA für.