X509 Zertifikate werden unter Linux normalerweise mit OpenSSL erstellt.
Ich beschreibe hier, wie ich einen privaten Schlüssel und einen Request für eine CA (Authorisierungsstelle) anlege:
openssl req -newkey rsa:2048 -out example.csr -keyout example.key
Die Datei example.crt mit dem Zertifikats-Requests lasse ich dann (z.B. durch Hochladen bei CaCert oder durch einen kommerziellen Anbieter) signieren. Ich erhalte eine Datei zurück, die ich example.pem nenne.
Dann muss das Zertifikat noch in die Apache-Konfiguration eingetragen werden, z.B. so:
<VirtualHost _default_:443>
DocumentRoot /var/example/www/
ServerName www.example.org:443
ServerAlias example.org:443
ServerAdmin webmaster@example.org
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /etc/apache2/ssl.crt/example.pem
SSLCertificateKeyFile /etc/apache2/ssl.crt/example.key
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews Includes
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log combined
ServerSignature On
</VirtualHost>
Im Serverbetrieb ist es kaum möglich, bei jedem Start des Apache eine Passphrase für den SSL-Schlüssel anzugeben. Deshalb entferne ich die Passphrase mit dem folgenden Kommando:
openssl rsa -in keyfile -out new_keyfileAchtung: Ein ungeschütztes Keyfile muss natürlich besonders geschützt sein!
Eigentlich kann man pro IP-Adresse nur ein Zertifikat hinterlegen, so dass man pro Domain mit https-Verschlüsselung eine eigene IP-Adresse braucht.
Bei CaCert sind aber Möglichkeiten beschrieben, wie man in einem Zertifikat mehrere Domain-Namen unterbringt: siehe http://wiki.cacert.org/wiki/VhostTaskForce
Eine Möglichkeit ist es mehrere Common Names im Zertifikat zu haben, dazu trägt man Folgendes in die Konfiguration von OpenSSL (/usr/lib/ssl/openssl.cnf) ein:
statt
commonName = Common Name (eg, YOUR name) commonName_max = 64schreibe
0.commonName = Common Name 1 0.commonName_max = 64 1.commonName = Common Name 2 1.commonName_max = 64 2.commonName = Common Name 3 2.commonName_max = 64
Tomcat unterstützt neben den "normalen" Java ("jks") Keystore-Dateien auch PKCS12-Keystores. Einen solchen Keystore kann man mit OpenSSL erstellen:
openssl pkcs12 -export -in example.pem -inkey example.key -out .keystore.p12 \
-name tomcat -certfile class3.crt -passout pass:geheim
In der server.xml des Tomcat sieht der https-Connector dann zum Beispiel so aus:
<Connector port="8443" proxyPort="443" maxHttpHeaderSize="8192"
maxThreads="10" minSpareThreads="3" maxSpareThreads="7"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="conf/.keystore.p12" keystorePass="geheim"
keystoreType="PKCS12" />
Siehe auch TomcatSSL.
Wer seine Zertifikate nur intern benutzt, kann sich auch eine eigene, private CA erzeugen. Das kann sinnvoll sein, um innerhalb eines Unternehmens eine ganz private Hierarchie von Zertifikaten zu haben (z.B. für OpenVPN) oder einfach, weil es schneller geht. Im übrigen zertifiziert CaCert keine nicht-öffentlichen Schlüssel, die keiner offiziellen Internet-Domain zugeordnet sind.
Ich habe hier einen Artikel
gefunden, der ein Skript benutzt, das Teil des openssl-Paketes ist. Allerdings ist dessen Benutzung extrem kompliziert, schlecht erklärt und das Skript nicht zu konfigurieren. In diesem Artikel
steht dann aber ganz einfach erklärt, wie es ohne das Skript geht. :-) (Außerdem versteht man dabei ungefähr, was die einzelnen Schritte machen.)
Heute ist die Authentifizierung bei SMTP oder POP3 über unverschlüsselte Verbindungen (aus guten Gründen) in der Regel nicht mehr zulässig. Man kann einen SMTP-Server also nicht mehr ohne weiteres per telnet testen.
Als Alternative nutze ich ~openSSL:
ich@computer:~$ openssl s_client -starttls pop3 -crlf -connect mail-example.com:110 ich@computer:~$ openssl s_client -starttls smtp -crlf -connect mail-example.com:25
SSL Zertifikate in einem Web-of-Trust signieren
- gute Doku, Tipps zum Prüfen von Zertifikaten