Kostenlose HTTPS-Zertifikate von WoSign / China

Da Let’s encrypt noch nicht so weit ist, ich aber trotzdem immer mal wieder HTTPS Zertifikate haben möchte die von den bekannten Webbrowsern ohne Rückfrage akzeptiert werden hab ich mir schon mal das ein oder andere günstige gekauft. Den Großteil verwalte ich aber noch mit CAcert.

Für die Zertifikate zu bezahlen war mir aber schon immer ein Dorn im Auge. Schon früh hatte ich mir StartSSL angeschaut aber das war mir alles deutlich zu umständlich. Über Twitter wurde ich dann auf einen neuen chinesischen Anbieter hingewiesen:

https://twitter.com/hanno/status/566193681594855424

Lange Rede kurzer Sinn. Das ganze ist sehr simpel und funktioniert super:

  • Key + CSR erzeugen:
    openssl req -new -nodes -newkey rsa:4096 -sha256 -keyout host.example.net.key -out host.example.net.csr
  • URL öffnen: https://buy.wosign.com/free/
  • Formular ausfüllen, Domain bestätigen, Zertifikat beantragen, auf Email warten
  • Nach Erhalt der ZIP Datei mit Zertifikat und Intermediates die Bundle-Datei öffnen und den letzten Eintrag entfernen
  • Im Webserver einbinden und SSL Server Test machen um zu prüfen ob alles korrekt ist

HowTo: Zertifikatsdatei .crt direkt mit Nagios ueberwachen

Bei einem OpenVPN Server besteht das Problem, das sein Zertifikat nicht aktiv von aussen ueberprueft werden kann. Um es dennoch mit Nagios zu ueberwachen muss die .crt Datei auf dem Server direkt ueberprueft und die Informationen zum Nagios Server gepusht werden.

Ich habe das mit dem Shellskript ssl-cert-check (mirror v. 3.27) von prefetch.net geloest.

Das Skript habe ich unter /usr/local/bin/ abgelegt:

cd /usr/local/bin
wget http://prefetch.net/code/ssl-cert-check

Dann gibt es ein Mini-Skript unter /root/skripte/nagios/check_openvpncert.sh, dass das ssl-cert-check Skript aufruft, und die Rueckgabe per NSCA an den Nagios Server pusht:

#!/bin/bash
send_nsca=/usr/sbin/send_nsca
send_nsca_cfg=/etc/send_nsca.cfg
nagioshost=nagios.example.org
host=$1
service=$2
plugin=/usr/local/bin/ssl-cert-check
output=$($plugin -n -x 30 -c /etc/ssl/certs/openvpn.example.org.crt)
rc=$?
echo -e "$hostt$servicet$rct$output" | $send_nsca -H $nagioshost -to 30 -c $send_nsca_cfg
exit 0

Das Mini-Skript selbst wird regelmaessig mit cron aus der /etc/cron.d/nagios-passive aufgerufen:

LANG=C
#
# Regular cron jobs for nagios passive checks
#
 
HOST=openvpn.example.org
 
*/20 *  * * *   root    /root/skripte/nagios/check_openvpncert.sh ${HOST} SSL-Cert_OpenVPN 1>> /dev/null 2>> /dev/null

Und nach der Einbindung als passive Check in Nagios wird auch das Ablaufdatum eines lokalen Zertifikats ueberprueft:

nagiosovpncert

Mehr Sicherheit fuer die eigenen Daten – Zertifikate

Dieses ist der dritte Teil einer Serie von Blogeintraegen, die sich als Reaktion auf die NSA Affaere um den Kontext Sicherheit fuer die eigenen Daten und Verschluesselung drehen.

Der erste Teil war fuer mich das Aufraeumen, einen Ueberblick zu bekommen sowie Strukturen zu schaffen, auf denen ich aufbauen kann. Der zweite Teil bestand darin einen Ort zu schaffen, in dem ich Keys und Passwoerter sicher aufbewahren und gleichzeitig alles in ein vernuenftiges Backup schieben kann. Der dritte Teil hier bezieht sich auf das erzeugen von Zertifikaten und Einrichten von verschluesselten Verbindungen zu Apache vHosts.

Oft probiere ich eine Software aus, erstelle mir fix eine Subdomain, richte einen vHost ein, und entweder das was ich ausprobiere ist gut und es geht in meinen digitalen Alltag ueber, oder eben nicht. Zurueck bleiben verwaiste Subdomains, deaktivierte vHosts und dann natuerlich Applikationen die ich taeglich nutze, und zu denen ich eine unverschluesselte Verbindung aufbaue, obwohl ich es selbst in der Hand habe die Verschluesselung einzustellen.

Ich habe mich an dieser Stelle bewusst gegen eine eigene CA entschieden. Das ist hinten raus sicherlich praktisch, haette meine Einstiegshuerde aber wieder zu hoch gelegt und ich bin mit frueheren Versuchen daran bisher immer an mir selbst und fehlender Kontinuitaet gescheitert. Schlichte einfache selbst signierte Zertifikate sind fuer mich immer noch am einfachsten.

Was ich jedoch gemacht habe, ist, das ich alle Zertifikate bei CAcert signieren lassen habe. Das hat fuer mich den Vorteil, dass ich ueber alle Zertifikate einen Ueberblick habe, und wenn ich will, kann ich mir auch das CAcert Rootzertifikat importieren und einfach denen vertrauen. Gemacht wie folgt:

  1. Key erzeugen:
    openssl genrsa -out example.org.key 4096
  2. CSR erzeugen:
    openssl req -new -key example.org.key -out example.org.csr

    Bei den Fragen ist nur wichtig, dass der „Common Name“ der Name der Domain oder Subdomain ist, die man sichern moechte. Ein Passwort ist nicht einzugeben.

Bei CACert dann den Inhalt der example.org.csr Datei eingeben und das Zertifikat was man angezeigt und per Email zugesendet bekommt unter example.org.crt abspeichern.

Ein einfacher Apache vHost mit SSL sieht wie folgt aus:

<VirtualHost *:443>
ServerAdmin webmaster@example.org
ServerName example.org
DocumentRoot /var/www/example.org
 
SSLEngine on
SSLCertificateFile /path/to/example.org.crt
SSLCertificateKeyFile /path/to/example.org.key
 
CustomLog /var/log/apache2/example.org-access.log combined
</VirtualHost>

Wenn man auf den Dienst nur ueber https zugreifen moechte und eine einfache Weiterleitung von  HTTP auf HTTPS einrichten moechte, kann man das zum Beispiel mit einem kleinen vHost und einer entsprechenden rewrite Regel machen:

<VirtualHost *:80>
ServerAdmin webmaster@example.org
ServerName example.org
DocumentRoot /var/www/example.org
 
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
 
CustomLog /var/log/apache2/example.org-access.log combined
</VirtualHost>

Wenn man Zugriff auf ein Nagios hat, dann ergibt es Sinn das Ablaufdatum des SSL Zertifikates mit zu Ueberwachen, damit man da nicht irgendwann in Probleme rennt. Das folgende Kommando und der folgende Check warnen einen sobald das Zertifikat nur noch 30 Tage gueltig ist.

Command Definition:

define command{
        command_name    check_ssl_certexpire
        command_line    $USER1$/check_http -H $HOSTNAME$ -p $ARG1$  -C 30
        }

Check:

define service{
        use                             my-service
        host_name                       example.org
        service_description             SSL-Cert root
        check_command                   check_ssl_certexpire!443
        }