X509 Zertifikate mit OpenSSL#

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 -new -out example.csr -keyout example.key
example.csr
enthält den Request
example.key
enthält den privaten Schlüssel

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>

Passphrase entfernen#

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_keyfile
Achtung: Ein ungeschütztes Keyfile muss natürlich besonders geschützt sein!

Mehrere VirtualHosts#

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                  = 64
schreibe
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

OpenSSL Zertifikat mit Tomcat#

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.

Tags:  Apache, SSL, CaCert, Tomcat

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-15) was last changed on 20-Feb-2010 22:57 by Peter Hormanns