Dieses Tutorial führt Sie durch Ihre allererste Konfiguration einer SSL-Website mit Let's Encrypt-Zertifizierung. Let's Encrypt ist eine neue SSL-Autorität, die kostenlose SSL-Zertifikate bereitstellt. Wir werden zwei vorhandene Tutorials verwenden („How to setup an intermediate compatible SSL website with Let’s Encrypt certificate“ und „The Perfect Server – Ubuntu 15.10 (Wily Werewolf) with Apache, PHP, MySQL, PureFTPD, BIND, Postfix, Dovecot and ISPConfig 3“).
Das hier beschriebene Setup ist mit jedem Ubuntu LAMP-Server kompatibel, sodass Sie diesen auch als Basis-Setup verwenden können.
Dieses Tutorial zeigt Ihnen, wie Sie Let's Encrypt auf Servern ohne ISPConfig 3 einrichten, da es in Kürze eine direkte Implementierung des Let's Encrypt-Dienstes in der nächsten Version von ISPConfig 3 (Version 3.1) geben wird. Wenn Sie also vorhaben, ISPConfig zu verwenden, warten Sie auf die Version 3.1 und auch auf ein neues Tutorial.
Erstellung der Website
Der erste Schritt besteht darin, die Website-Konfiguration und das Verzeichnis zu erstellen und SSL (Apache mod_ssl) dafür zu aktivieren. Es liegt an Ihnen, ob Sie die Standardkonfiguration für eine Website auf einem Server verwenden oder mehrere vhosts verwenden möchten, um mehr als eine Domain zu hosten. Für eine zuverlässigere und skalierbarere Nutzung erstelle ich eine vhost-Konfiguration für meine „Lab“-Domäne isp1.cloudapp.net von Azure.
Alle vhosts werden unter Ubuntu und Debian standardmäßig im Verzeichnis /etc/apache2/sites-available gespeichert. Führen Sie den folgenden Befehl aus, um eine Liste vorhandener vhost-Konfigurationsdateien abzurufen.
ls -l /etc/apache2/sites-available/
Meine Ausgabe sieht so aus:
[email protected]:/home/falco# ls -l /etc/apache2/sites-available/
-rw-r--r-- 1 root root 1332 May 20 2015 000-default.conf
-rw-r--r-- 1 root root 6437 May 20 2015 default-ssl.conf
Wir können jetzt die "Standard"-Konfigurationsdatei zum Klonen verwenden und bearbeiten, oder wir können unsere eigene Konfiguration verwenden. Ich ziehe es vor, meine eigene Konfiguration zu verwenden, da ich das seit vielen Jahren tue, also erstellen wir einen neuen vhost, indem wir die folgende Datei erstellen:
vi /etc/apache2/sites-available/isp1.cloudapp.net.conf
Fügen Sie in diese Datei folgenden Inhalt ein:
<VirtualHost *:80>
ServerName isp1.cloudapp.net
ServerAlias www.isp1.cloudapp.net
DocumentRoot /home/web/isp1.cloudapp.net/public_html
ErrorLog /home/web/isp1.cloudapp.net/log/habdak.eu_error_log
CustomLog /home/web/isp1.cloudapp.net/log/habdak.eu_access_log combinedScriptAlias /cgi-bin/ /home/web/isp1.cloudapp.net/cgi-bin/
DirectoryIndex index.html index.htm index.php index.php4 index.php5
<Directory /home/web/isp1.cloudapp.net/public_html>
Options -Indexes +IncludesNOEXEC +SymLinksIfOwnerMatch +ExecCGI
allow from all
AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
Require all granted
AddType application/x-httpd-php .php
AddType application/json .json
</Directory>
<Directory /home/web/isp1.cloudapp.net/cgi-bin>
allow from all
AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
Require all granted
</Directory>
RemoveHandler .php
RemoveHandler .php5
php_admin_value engine Off
IPCCommTimeout 301
FcgidMaxRequestLen 1073741824
php_value memory_limit 128M
php_value suhosin.session.encrypt Off
</VirtualHost>
<VirtualHost *:443>
ServerName isp1.cloudapp.net
ServerAlias www.isp1.cloudapp.net
DocumentRoot /home/web/isp1.cloudapp.net/public_html
ErrorLog /home/web/isp1.cloudapp.net/log/habdak.eu_error_log
CustomLog /home/web/isp1.cloudapp.net/log/habdak.eu_access_log combined
ScriptAlias /cgi-bin/ /home/web/isp1.cloudapp.net/cgi-bin/
DirectoryIndex index.html index.htm index.php index.php4 index.php5
<Directory /home/web/isp1.cloudapp.net/public_html >
Options -Indexes +IncludesNOEXEC +SymLinksIfOwnerMatch +ExecCGI
allow from all
AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
Require all granted
AddType application/x-httpd-php .php
AddType application/json .json
</Directory>
<Directory /home/web/isp1.cloudapp.net/cgi-bin >
allow from all
AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
Require all granted
</Directory>
RemoveHandler .php
RemoveHandler .php5
php_admin_value engine Off
IPCCommTimeout 301
FcgidMaxRequestLen 1073741824
php_value memory_limit 128M
php_value suhosin.session.encrypt Off
SSLEngine on
SSLCertificateFile /home/web/isp1.cloudapp.net /ssl.cert
SSLCertificateKeyFile /home/web/isp1.cloudapp.net /ssl.key
SSLCACertificateFile /home/web/isp1.cloudapp.net /ssl.ca
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLProtocol All -SSLv2 -SSLv3
SSLCompression off
SSLHonorCipherOrder On
</VirtualHost>
Ersetzen Sie den Domänennamen durch Ihre Domäne, wo immer er vorkommt, und speichern Sie die Datei. Um die Konfiguration zu aktivieren, führen Sie Folgendes aus:
a2ensite isp1.cloudapp.net.conf
Erstellen Sie nun die Ordner für die Website:
mkdir /home/web
mkdir /home/web/isp1.cloudapp.net
mkdir /home/web/isp1.cloudapp.net/public_html
mkdir /home/web/isp1.cloudapp.net/cgi-bin
mkdir /home/web/isp1.cloudapp.net/logs
Starten Sie Apache neu, um die neue Konfiguration zu übernehmen:
sudo service apache2 restart
Jetzt müssen wir die Zertifikatsdateien generieren.
Installieren Sie Let's Encrypt und generieren Sie Ihr erstes SSL-Zertifikat
Ich ziehe es vor, das Root-Login für die Verwaltung zu verwenden, anstatt sudo vor jedem Befehl auszuführen, also lass uns su zum Root-Benutzer:
sudo su
Navigieren Sie zu Ihrem Root-Home-Verzeichnis:
cd ~root
Installieren Sie git zum Abrufen der Git-Repository-Dateien von Let's Encrypt:
apt-get install git
Klonen Sie nun das Git-Repository von Let's Encrypt:
git clone https://github.com/letsencrypt/letsencrypt.git letsencrypt
Navigieren Sie zu Ihrem neuen letsencrypt-Ordner:
cd letsencrypt
Und fordern Sie Ihr SSL-Zertifikat an:
./letsencrypt-auto certonly --webroot -w /home/web/isp1.cloudapp.net/public_html -d isp1.cloudapp.net
Wenn Sie ein Zertifikat für die Masterdomäne anfordern (Domäne der ersten Ebene, auch bekannt als cloudapp.net), verwenden Sie den Parameter -d zweimal. Mit und ohne www-Präfix wie folgt:
./letsencrypt-auto certonly --webroot -w /home/web/cloudapp.net/public_html -d cloudapp.net -d www.cloudapp.net
Andernfalls ist das Zertifikat für Besucher, die Ihre Website mit dem Präfix www öffnen, nicht gültig.
Sie können einem Zertifikat auch andere Subdomains hinzufügen. Wenn beispielsweise Ihre Subdomain admin.cloudapp.net mit derselben Website (demselben Ordner auf dem Server) übereinstimmt, sollten Sie sie auch zu diesem Zertifikat hinzufügen. Leider können Sie bei let's encrypt keine Platzhalter wie (*.cloudapp.net) verwenden.
Let's Encrypt aktualisiert automatisch alle Abhängigkeiten und führt Sie durch die Einrichtung. Alles, was Sie tun müssen, ist auf das Aufforderungsfenster zu warten, in dem Sie nach Ihrer E-Mail-Adresse gefragt werden. Diese Adresse wird nur zum Wiederherstellen verlorener Daten verwendet.
Ihre neuen Schlüssel werden jetzt standardmäßig in /etc/letsencrypt/ gespeichert. Wir werden sie mit unserem Website-Verzeichnis verknüpfen, damit wir die Schlüssel später verwalten können.
ln -s /etc/letsencrypt/archive/isp1.cloudapp.net/cert1.pem /home/web/isp1.cloudapp.net/ssl.cert
ln -s /etc/letsencrypt/archive/isp1.cloudapp.net/chain1.pem /home/web/isp1.cloudapp.net/ssl.ca
ln -s /etc/letsencrypt/archive/isp1.cloudapp.net/privkey1.pem /home/web/isp1.cloudapp.net/ssl.key
Jetzt sollten Sie mit SSL auf Ihre Website zugreifen können. Let's Encrypt informiert Sie automatisch rechtzeitig über ablaufende Zertifikate per E-Mail an die Adresse, die Sie bei der Installation von Let's Encrypt angegeben haben.