!!!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.org__ 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.
!!Links
Gegenüberstellung __keytool__ und __openssl__:\\
[http://www.m1b.de/content/know/security/x509/cert_openssl.html]
;Kategorien: KategorieApache
[{Tag Apache SSL HTTPS}]