Mozilla, die Electronic Frontier Foundation und weitere wollen in Zukunft mit der Initiative "Lets Encrypt" sichere Server bereitstellen.
Genauer gesagt wollen sich die Partner als CA (Zertifizierungsstelle) in Stellung bringen, um kostenlose SSL/TLS-Zertifikate für Linux Server anzubieten.
Anders als bei bekannten Anbietern wie Cacert oder StartSSL, sollen bei "Lets Encrypt" zwei Linux Befehle ausreichen, um ein Zertifikat zu generieren es in den Server einzubinden und sofort live zu schalten.
Ob das klappt wird sich zeigen, denn bei den bereits bekannten Anbietern sorgte in der Vergangenheit oft die nicht vorhandene Akzeptanz der Browserhersteller für Probleme, auch die soll sich beim neuen Projekt ändern.
Laut eigenen Aussagen soll das Projekt im Sommer 2015 fertig gestellt werden, einen ersten Einblick konnte sich jeder beim C31c3 verschaffen.
Doch wie steht es momentan um das Projekt und wie soll es im Endeffekt funktionieren.
Eine Installation der bereits vorhandenen Skripte sollte einen ersten Einblick geben.
Referenzsystem ist ein Ubuntu 14.04 mit installiertem Apache.
Voraussetzung
Voraussetzung ist ein installierter Apache Server, mit einer Beispielseite, da Lets-encrypt automatisch eingerichtete Webseiten im Apache erkennt und konfiguriert.
Nginx und anderen Webserver werden in der jetzigen Entwickler Version leider noch nicht unterstützt.
Apache einrichten und Beispielseite konfigurieren
sudo apt-get install apache2
sudo touch /etc/apache2/sites-available/beispiel-le
sudo mkdir /home/beispiel
sudo touch /var/log/apache2/beispiel-access.log
sudo touch /var/log/apache2/beispiel-error.log
Die VirtualHosts Konfiguration sieht nach einer Grundeinrichtung wie folgt aus:
sudo nano /etc/apache2/sites-available/beispiel-le
<VirtualHost server:80>
ServerName beispiel
ServerAlias
DocumentRoot /home/beispiel/
ServerAdmin prontos@email.de
CustomLog /var/log/apache2/beispiel-access.log combined
ErrorLog /var/log/apache2/beispiel-error.log
LogLevel warn
</VirtualHost>
Webseite aktivieren und Konfiguration neu laden
sudo a2ensite beispiel
sudo service apache2 reload
Testinstallation Lets Encrypt
Zunächst müssen die nötigen Pakete installiert werden.
sudo apt-get install python python-setuptools python-virtualenv python-dev gcc swig dialog libaugeas0 libssl-dev ca-certificates python-m2crypto python-augeas
sudo virtualenv --no-site-packages -p python2 venv
Running virtualenv with interpreter /usr/bin/python2
New python executable in venv/bin/python2
Also creating executable in venv/bin/python
Installing setuptools, pip...done.
Nun das Git Repository auschecken
sudo git clone https://github.com/letsencrypt/lets-encrypt-preview.git
Die Python Umgebung verschieben
sudo mv /home/user/venv/ /home/user/lets-encrypt-preview/
Nun kann die eigentliche Installation gestartet werden
cd lets-encrypt-preview
sudo ./venv/bin/python setup.py install
Installing easy_install-3.4 script to /home/user/lets-encrypt-preview/venv/bin
Installing easy_install script to /home/user/lets-encrypt-preview/venv/bin
Using /home/user/lets-encrypt-preview/venv/lib/python2.7/site-packages
Finished processing dependencies for letsencrypt==0.1
Ist alles ohne Fehler verlaufen, kann LetsEncrypt ausgeführt werden.
sudo ./venv/bin/letsencrypt
Generating key: /etc/apache2/ssl/key-letsencrypt_1.pem
x Performing the following challenges:
x DVSNI challenge for name beispiel.
x Created an SSL vhost at
x /etc/apache2/sites-available/beispiel-le-ssl.conf
x Ready for verification...
x Waiting for 3 seconds...
x Expected message (authorization) not received
x Failed Authorization procedure - cleaning up challenges
x Cleaning up challenges for beispiel
Lets Encrypt passt die vorhandene Webseite so an, dass diese auf HTTPS hört und bindet zusätzlich eine TLS/SSL Konfigurationsdatei namens "options-ssl.conf" ein.
Ein Blick in die erzeugte VirtualHosts zeigt die Details.
sudo nano /etc/apache2/sites-available/beispiel-le-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost 10.8.0.49:443>
ServerName beispiel
ServerAlias
DocumentRoot /home/beispiel/
ServerAdmin prontos@email.de
CustomLog /var/log/apache2/beispiel-access.log combined
ErrorLog /var/log/apache2/beispiel-error.log
LogLevel warn
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
Include /etc/letsencrypt/options-ssl.conf
</VirtualHost>
</IfModule>
Ein weiterer Blick auf die eingebundene Zusatzkonfiguration zeigt typische Sicherheitseinstellungen für Apache Webserver, der ITrig Leser sollte diese bereits aus vergangenen Artikeln kennen.
SSL 2.0 und 3.0 sind deaktiviert, Kompression ist ausgeschaltet, es sind sichere CypherSuites hinterlegt, die Serversignatur ist deaktiviert, usw.
Hier die Konfiguration im Detail:
sudo nano /etc/letsencrypt/options-ssl.conf
# Baseline setting to Include for SSL sites
SSLEngine on
# Intermediate configuration, tweak to your needs
SSLProtocol all -SSLv2 -SSLv3
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$
SSLHonorCipherOrder on
SSLCompression off
ServerSignature Off
AcceptPathInfo Off
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/pdf
AddDefaultCharset UTF-8
SSLOptions +StrictRequire
# Add vhost name to log entries:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" vhost_combined
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common
CustomLog /var/log/apache2/access.log vhost_combined
LogLevel warn
ErrorLog /var/log/apache2/error.log
# Always ensure Cookies have "Secure" set (JAH 2012/1)
#Header edit Set-Cookie (?i)^(.*)(;\s*secure)??((\s*;)?(.*)) "$1; Secure$3$4"
Troubleshooting
Fehlermeldung, wenn die Umgebung nicht richtig gefunden wurde.
sudo ./venv/bin/python lets-encrypt-preview/setup.py install
running bdist_egg
running egg_info
creating letsencrypt.egg-info
writing dependency_links to letsencrypt.egg-info/dependency_links.txt
writing requirements to letsencrypt.egg-info/requires.txt
writing letsencrypt.egg-info/PKG-INFO
writing top-level names to letsencrypt.egg-info/top_level.txt
writing entry points to letsencrypt.egg-info/entry_points.txt
writing manifest file 'letsencrypt.egg-info/SOURCES.txt'
error: package directory 'letsencrypt' does not exist
Fazit
Zum jetzigen Zeitpunkt ein Urteil zu fällen ist recht schwer. Die Installation ist noch im Entwicklungsstadium und wird, sobald das Projekt produktiv geht, sicherlich einfach von der Hand gehen. Mit den versprochenen zwei Befehlen "sudo apt-get install lets-encrypt" und "lets-encrypt webseitename" kann zwar bis jetzt noch nicht gearbeitet werden, dennoch lädt das Installationsskript automatisch das SSL Modul in den Apache und fragt nach der gewünschten HTTPS Seite. Die Sicherheitseinstellungen die automatisch eingebunden werden sind so gut wie up2date und könnten zu diesem Zeitpunkt belassen werden. (Bei CipherSuites gehen die Meinungen ja bekanntlich auseinander)
Die automatische Einbindung des Zertifikats hat bei disen Versuch nicht geklappt, was nicht weiter verwundert, da die Autorisierung fehlschlägt.
Schon jetzt kann jedoch behauptet werden, dass dieses Projekt wenn dann an der Browserintegration scheitern könnte und nicht an der Bedienung.
Das automatische Erneuern (renew) oder das Zurücknehmen von Zertifikaten (revoke) ist leider noch nicht funktionsfähig, genauso werden andere Webserver wie Nginx vermisst, aber bis zum Sommer ist auch noch etwas Zeit.
Um sich diese zu verkürzen kann das Installationsskript gerne selbst ausprobiert werden, aber bitte nicht auf Produktivsystemen.