Kostenlose eMail-Zertifikate: http://www.comodo.com/home/internet-security/free-email-certificate.php
Kostenlose SSL-Zertifikate: http://www.startssl.com/ Wie man die einrichtet (Heise)
CAcert: http://de.wikipedia.org/wiki/CAcert
http://www.ornl.gov/~jar/Apache/SSL_in_Apache_2.html oder besser: http://www.tim-bormann.de/index.php?section=145
apt-get install openssl ssl-cert
Aber: Das dortige (www.tim-bormann.de) Erzeugen eines Keys funzt nicht.
Mein Vorgehen (im root-Home-dir):
openssl genrsa -out server.key 2048 ((h666)) (Die Option -des3 unbedingt wegöassen,
weil sonst der Key per PW verschlüsselt wird uns PW bei jeden Start einzigeben ist)
openssl req -new -x509 -key server.key -out server.crt -days 1095
mkdir /etc/apache2/ssl
cp server.* /etc/apache2/ssl/
chmod 644 /etc/apache2/ssl/*
cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl
Folgendes in neuer Datei ändern:
<VirtualHost *:443> # SSL (START) SSLEngine on SSLCertificateFile /etc/apache2/ssl/server.crt SSLCertificateKeyFile /etc/apache2/ssl/server.key # SSL (ENDE)
Auf Port 443 hören:
vi /etc/apache2/ports.conf Listen 80 Listen 443
dann noch ssl modul in Apache einfügen:
a2enmod ssl
Und neue (kopierte) Site einfügen:
a2ensite ssl
neustart durch
/etc/init.d/apache2 reload
oder
apache2ctl restart # Kurzform
Quelle1)
OpenSSL ist ein freies unter einer BSD-Style Lizenz stehendes Toolkit. OpenSSL implementiert die Netzwerkprotokolle Secure Socket Layer (SSL v2/v3) und Transport Layer Security sowie die von diesen Protokollen genutzten Kryptographiestandards.
Die Nutzung dieses Toolkits (bzw. jedem komplexerem) Toolkit erschließt sich dem angehenden Nutzer nicht sofort. Die Manpages verwirren im ersten Moment eher, als das sie helfen. Aus diesem Grunde habe ich dieses Dokument verfaßt. Es soll ein kompaktes HOWTO zur praktischen Nutzung von (Open)SSL und Programmen sein, die SSL unterstützen. Neben dem direkten Aufruf des openssl Kommandos mit Schaltern und Optionen wird noch das Script CA.pl mitgeliefert. Dieses stellt ein vereinfachtes Interface zu den einzelnen OpenSSL Kommandos dar. CA.pl arbeitet mit dem Default Configfile oder dem File, das in der Umgebungsvariable OPENSSL_CONF mit vollem Pfad angegeben ist.
Eine Root-CA benötigt ein selbstsigniertes Zertifikat, welches mit dem folgenen OpenSSL Aufruf erzeugt wird:
openssl req -new -x509 -keyout ssl_priv.pem -out ca_cert.pem -days 3650
Hiermit wird ein Zertifikat mit einem zugehörigen Private-Key erzeugt. Das Zertifikat ist für den Zeitraum von 10 Jahren gültig. Es sollte sichergestellt werden, daß der Private-Key ausschließlich zum Signieren anderer Zertifikate verwendet wird. Dieser Key ist der sensibelste Teil einer CA-Infrastruktur. Der Zertifikatteil (public Key) dieses Paares wird den Clients (Browsern) zur Verfügung gestellt. Die Clients können die Gültigkeit von Zertifikaten, die mit diesem Private-Key signiert wurden, mit Hilfe des Root-CA Zertifikats (ca_cert.pem) verifizieren.
Die Passphrase, welche beim Erstellen abgefragt wird sollte daher sehr sicher gewählt werden. Bei jedem Signieren eines anderen Zertifikats wird die Passphrase benötigt. Das Root-CA Zertifikat wird ausschlieslich zum Signieren von anderen Zertifikaten benötigt!
Zuerst müssen alle für die Verifizierung durch Browser unnötigen Informationen aus dem Zertikat entfernt werden:
openssl x509 -in ca_cert.pem -out ca_cert.crt
Dieses Zertifikat kann auf der Website publiziert werden. Der Webserver sollte einen MIME Eintrag für .crt Files konfiguriert haben:
<IfModule mod_ssl.c> AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl </IfModule>
Jetzt können sich die Clients das Zertifikat herunterladen und im Browser installieren. Wenn dieses erfolgt ist, akzeptiert der Browser alle Zertifikate, die mit dem zugehörigen Root-CA Key signiert wurden.
Um ein von der Root-CA (bzw. untergeordneten CA's) signiertes Zertifikat zu erhalten, wird zuerst ein Certificate Signing Request erzeugt. Dieses erfolgt mit Hilfe des openssl Befehls:
openssl req -new -keyout client-key.pem -out client-req.pem -days 365
ACHTUNG!
Der Common Name CN (eg, YOUR name) ist der Name, für den das Zertifikat erstellt und signiert wird. Bei einer Website ist es der FQDN des VirtuellenHosts, bei einem S/MIME Zertifikat ist es die Emailadresse des Eigentümers.
Der Zertifiat- Request liegt jetzt in der Datei „client-req.pem und kann von der CA signiert werden. Der Private-Key des Zertifiatsbesitzers ist in client-key.pem gespeichert und sollte sicher aufbewahrt werden.
Diese Datei wird nun an die CA gegeben, um sie dort vom Private-Key der Root-CA oder einer untergeordneten CA signieren zu lassen.
Der CSR, der der CA übergeben wurde wird jetzt mit dem Private-Key der CA signiert.
openssl ca -policy policy_anything -config private/openssl.conf \ -out client-cert.pem -infiles client-req.pem
Die Konfiguration liegt in ./private/openssl.conf. Hier werden in der Sektionauch [CA_default] die Pfade für die CA Zertifikate und Keyfiles angegeben. Wenn -config nicht angegeben wird, werden die Werte aus der eincompilierten Configdatei genommen (/usr/lib/ssl/openssl.conf).
Das fertige signierte Zertifikat ist in der Datei client-cert.pem gespeichert und kann dem Client zurückgegeben werden.
Die Details eines Zertifikats können mit Hilfe des Befehls
<code> openssl x509 -in client-cert.pem -noout -text</code>
angezeigt werden.
openssl pkcs12 -nokeys -in cert.pem -export -out cert.pfx -name "NAME"
Zusätzliche (CA-) Zertifikate werden mit dem Schalter -certfile übergeben.
Ein Key der in verschlüsselter Form vorliegt (also mit einer Passphrase gesichert ist), kann beim automatischen Restarten von Servern hinderlich sein. Um den Key zu entschlüsseln und die Passphrase zu entfernen ist der folgende Aufruf notwendig:
openssl rsa -in server-rsa-key.pem > server-key.pem
Die Passphrase wird noch einmal benötigt, um den Key zu entschlüsseln. Jetzt kann der Key geladen werden, ohne das eine Passphrase abgefragt wird.
OpenSSL enthält ein Server- und ein Clientprogramm, welches einfach zum Debugging von SSL Clients- bzw. Servern genutzt werden kann.
s_server ist ein Serverprogramm, das auch zum Debuggen von Clients genutzt werden kann.
<code> openssl s_server -accept 443 -www</code>
Der Server bindet sich an Port 443 HTTPS. Der Schalter -www bewirkt, daß eine Statusnachricht an den Client zurückgeschickt wird, wenn er eine Verbindung aufgebaut hat. Wenn Key- und Zertifikat nicht an den eincompilierten Orten liegen, müssen diese explizit angegeben werden.
s_client implementiert einen allgemeinen SSL/TLS Client. Dieser connected sich sich mit dem zu debuggenden Server. Das Programm ist sehr praktisch beim Debuggen von SSL/TLS Problemen.
openssl s_client -connect hostname:443
Mit dem obigen Kommando kann ein HTTPS-Server geprüft werden. Nach erfolgreichem Connect können normale HTTP-Befehle abgeseetzt werden. Schon beim Verbindugnsaufbau werden zahlreiche Informationen über die Verbindung angezeigt. Der Schalter -debug liefert weitere Informationen sowie einen Hex-Dump des Traffics.