Kostenlose eMail-Zertifikate: [[http://www.comodo.com/home/internet-security/free-email-certificate.php]] Kostenlose SSL-Zertifikate: [[http://www.startssl.com/]] [[ssl_zertifikate:startssl|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: # 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 Quelle((http://www.werthmoeller.de/doc/microhowtos/openssl/)) ====== OpenSSL ====== ===== SSL/TLS Verschlüsselung mit OpenSSL ===== 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. ===== Management von Zertifikaten ===== ==== Erzeugen eines Root Certification Authority Certificate ==== 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! ==== Publikation des Root-CA Zertifikats ==== 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: AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl 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. ==== Signieren eines Zertifiats ==== === CSR erzeugen === 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. === CSR von CA signieren === 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. ==== Zertifikatsdaten anzeigen ==== Die Details eines Zertifikats können mit Hilfe des Befehls openssl x509 -in client-cert.pem -noout -text angezeigt werden. ==== Zertifikat in PKCS#12 (pfx) konvertieren ==== openssl pkcs12 -nokeys -in cert.pem -export -out cert.pfx -name "NAME" Zusätzliche (CA-) Zertifikate werden mit dem Schalter -certfile übergeben. ==== Zertifikat entschlüsseln ==== 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. ==== Debugging von SSL- verschlüsselten Protokollen ==== OpenSSL enthält ein Server- und ein Clientprogramm, welches einfach zum Debugging von SSL Clients- bzw. Servern genutzt werden kann. == s_server == s_server ist ein Serverprogramm, das auch zum Debuggen von Clients genutzt werden kann. openssl s_server -accept 443 -www 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 == 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.