This page (revision-39) was last changed on 07-Nov-2025 11:39 by Peter Hormanns 

This page was created on 20-Oct-2006 19:25 by PeterHormanns

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Page revision history

Version Date Modified Size Author Changes ... Change note
39 07-Nov-2025 11:39 7 KB Peter Hormanns to previous EC256 Key
38 07-Nov-2025 10:20 7 KB Peter Hormanns to previous | to last
37 03-Aug-2020 13:41 7 KB Peter Hormanns to previous | to last nur tls1.1 testen
36 11-Feb-2020 20:05 6 KB Peter Hormanns to previous | to last Inhaltsverzecihsnis
35 11-Feb-2020 19:54 6 KB Peter Hormanns to previous | to last Test, ob Zertifiat weiterhin gültig
34 30-Oct-2017 10:12 6 KB Peter Hormanns to previous | to last openssl s_client ftp
33 17-Aug-2017 17:57 6 KB Peter Hormanns to previous | to last HTTPS
32 17-Aug-2017 17:55 6 KB Peter Hormanns to previous | to last HTTPS
31 17-Aug-2017 17:22 6 KB Peter Hormanns to previous | to last -ign_eof OpenSSL Option
30 26-Jul-2016 15:44 6 KB Peter Hormanns to previous | to last Link Maximilian Boehm
29 20-Feb-2016 18:32 6 KB Peter Hormanns to previous | to last SHA256 Hash
28 20-Feb-2016 18:18 6 KB Peter Hormanns to previous | to last SHA256 Hash
27 08-Jan-2016 14:03 6 KB Peter Hormanns to previous | to last SNI, Multidomain
26 08-Jan-2016 14:02 6 KB Peter Hormanns to previous | to last SNI, Multidomain
25 07-Aug-2015 12:09 5 KB Peter Hormanns to previous | to last self signed cert
24 07-Aug-2015 11:25 5 KB Peter Hormanns to previous | to last self signed cert
23 13-Apr-2015 15:32 5 KB Peter Hormanns to previous | to last Option startls
22 13-Apr-2015 15:30 5 KB Peter Hormanns to previous | to last Option startls
21 13-Apr-2015 15:28 5 KB Peter Hormanns to previous | to last

Page References

Incoming links Outgoing links

Version management

Difference between version and

!!!~OpenSSL

!!X509
!!!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 -newkey rsa:2048 -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.

<<!!!!!>> Zertifikate mit eigener Certificate Authority (CA) zertifizieren

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|http://mindref.blogspot.de/2010/12/openssl-create-certificates.html] 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|http://mathias-kettner.de/lw_ca_zertifikat_erstellen.html] 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.)

<<
!!~OpenSSL
!!!Links
>> <<als Alterative zu {{telnet}}

<<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
}}}


!!Links

*Gegenüberstellung __keytool__ und __openssl__:\\
[http://www.m1b.de/content/know/security/x509/cert_openssl.html]
*[CaCert], [http://www.cacert.org] SSL Zertifikate in einem Web-of-Trust signieren
*[http://www.madboa.com/geek/openssl/] - gute Doku, Tipps zum Prüfen von Zertifikaten

\\
[{Tag Apache SSL CaCert Tomcat Crypto}]