This page (revision-19) was last changed on 14-Aug-2015 12:53 by Peter Hormanns 

This page was created on 03-Oct-2006 21:29 by UnknownAuthor

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
19 14-Aug-2015 12:53 6 KB Peter Hormanns to previous keine weiche Verschlüsselung
18 20-Mar-2013 12:55 5 KB Peter Hormanns to previous | to last neues Tag
17 03-May-2012 14:37 5 KB Peter Hormanns to previous | to last rsa2048
16 16-Dec-2011 13:44 5 KB Peter Hormanns to previous | to last leider gibt's blogs.sun.com nicht mehr...
15 17-Dec-2008 15:51 5 KB Peter Hormanns to previous | to last Portecle
14 03-Jul-2008 12:15 5 KB PeterHormanns to previous | to last neue Seite CaCert
13 24-May-2008 22:08 5 KB PeterHormanns to previous | to last commons-ssl
12 19-Feb-2008 21:28 5 KB PeterHormanns to previous | to last Kategorie raus
11 16-Jan-2008 17:09 5 KB PeterHormanns to previous | to last Tagging
10 16-Jan-2008 17:06 5 KB PeterHormanns to previous | to last Tagging
9 10-Dec-2007 12:52 5 KB PeterHormanns to previous | to last SSL-Kommandos
8 09-Dec-2007 16:45 5 KB PeterHormanns to previous | to last SSL Tutorial
7 07-Dec-2007 16:31 5 KB PeterHormanns to previous | to last no more unable to find...
6 05-Nov-2007 10:05 5 KB PeterHormanns to previous | to last Tippfehler
5 01-Nov-2007 13:52 5 KB ThomasBayen to previous | to last Richtige VM unter Debian auswählen
4 16-Dec-2006 23:33 4 KB PeterHormanns to previous | to last KategorieTomcat
3 14-Dec-2006 18:14 4 KB PeterHormanns to previous | to last Kein Link auf hostname
2 20-Oct-2006 19:21 4 KB PeterHormanns to previous | to last Formatiert für JSPWiki, OpenSSL
1 03-Oct-2006 21:29 4 KB UnknownAuthor to last

Page References

Incoming links Outgoing links

Version management

Difference between version and

!!!SSL Zertifikat für Tomcat erzeugen

Wenn man Tomcat als Webserver nutzt, kann man einen HTTPS-Listener
konfigurieren und so über SSL verschlüsselte Verbindungen nutzen.

Mit einigen Einträgen in ''web.xml'' kann man auch dafür sorgen,
daß eine Authentifizierung vorgeschrieben ist. Die
Benutzerdatenbank steht in
''/var/lib/tomcat4/conf/tomcat-users.xml''. Wer eine vernünftige
Sicherheit haben will, sollte über eine Basic-Authentication (oder
Formular-Auth.) hinaus nur noch SSL-Verbindungen annehmen.

Folgender Eintrag gehört dazu in ''/etc/tomcat4/server.xml''.
Eigentlich sollte der laut Doku dort auskommentiert schon stehen,
tat er aber in meiner Debian-Installation nicht.

!!Beispiel 1

{{{
 <Connector port="8443"
     maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
     enableLookups="false" disableUploadTimeout="true"
     acceptCount="100" scheme="https" secure="true"
     clientAuth="true" sslProtocol="TLS"
     keystoreFile="/usr/share/tomcat4/.keystore" keystorePass="changeit" />
}}}

!!Beispiel 2

{{{  
 <!-- Define an SSL HTTP/1.1 Connector on port 8443 -->
 <Connector className="org.apache.catalina.connector.http.HttpConnector"
          port="8443" minProcessors="5" maxProcessors="75"
          enableLookups="true"
          acceptCount="10" debug="0" scheme="https" secure="true">
     <Factory className="org.apache.catalina.net.SSLServerSocketFactory"
              clientAuth="false" protocol="TLS"/>
 </Connector>
}}}

!!Keine "weiche" Verschlüsselung>>
<<
Um das veraltete SSLv2 und zu "weiche" Verschlüsselungsalgorithmen zu vermeiden,
gebe die Protokolle und Ciphers explizit an, zum Beispiel:

{{{  
   sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2" ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
   TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
   TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA,
   TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,
   TLS_RSA_WITH_AES_256_CBC_SHA,SSL_RSA_WITH_RC4_128_SHA"
}}}

!!Schlüssel erzeugen

>>In der Java-Welt benutzt man für die Verwaltung von SSL-Zertifikaten das "keytool", das man im "bin"-Verzeichnis des Java-SDK findet.

Gerade unter Debian Linux ist es wichtig, daß man sich immer im klaren darüber ist, mit welchem Java man gerade arbeitet. Debian installiert gerne '''gcj''' für alles mögliche, während ich persönlich das Java von '''Sun''' bevorzuge. Mit '''update-java-alternatives -l''' bekommt man eine Liste der installierten VMs und mit sowas wie

 update-java-alternatives -s java-1.5.0-sun

stellt man die Standard-VM ein. Dies erkläre ich an dieser Stelle, weil die Keytools inkompatibel sind und ich mit dem keytool vom gcj im Tomcat nichts erreicht habe.

Um das nötige Zertifikat zu erzeugen und zu signieren bin ich folgendermaßen vorgegangen:

1. Key erzeugen mit:

{{{
 keytool -genkey <<-keyalg RSA -keysize 2048 >>-keystore /usr/share/tomcat4/.keystore -alias tomcat
}}}

Hier genügt es, im Namensfeld "common name" (auf die Frage "What is your first
and last name?") den Domainnamen anzugeben, also z.B.
"ssl.example.org". Alle anderen Felder werden von <<CaCertCACert>> nicht
zertifiziert, weil <<CaCertCACert>> die Angaben nicht prüfen kann. Bei einem
kostenpflichtigen Zertifikat, z.B. von Verisign, sollten die
Angaben natürlich vollständig sein und zertifiziert werden.

2. Einen Zertifikat-Request für die CA exportieren mit:

{{{
 keytool -certreq -keystore /usr/share/tomcat4/.keystore -alias tomcat -file keyrequest.csr
}}}

3. Das Zertifikat signieren. Bei <<CaCerthttp://cacert.org>> kann man
Zertifikate kostenlos signieren lassen. Nachteil: Das
Root-Zertifikat von <<CaCertCACert>> ist bisher nicht in den Browsern
hinterlegt. Daher muss ich die Root-Zertifikate von <<CaCertCACert>> in
meinen Keystore importieren:

{{{
 wget http://www.cacert.org/certs/root.crt
 wget http://www.cacert.org/certs/class3.crt
 keytool -import -keystore /usr/share/tomcat4/.keystore -alias cacertclass1ca -import -trustcacerts -file root.crt
 keytool -import -keystore /usr/share/tomcat4/.keystore -alias cacertclass3ca -import -trustcacerts -file class3.crt
}}}

4. Import des signierten SSL-Zertifikats: Ich speichere das
Zertifikat in einer Datei "cert.pem".

{{{
 keytool -import -keystore /usr/share/tomcat4/.keystore -v -trustcacerts -alias tomcat -file cert.pem
}}}

Das war's schon.

Alternativ kann man natürlich auch mit einem selbstzertifizierten
SSL-Key arbeiten. Dazu fallen die Punkte 2. bis 4. weg. Stattdessen
ruft man auf:

{{{
 keytool -selfcert -keystore /usr/share/tomcat4/.keystore -alias tomcat
}}}

!!Alternativ

kurz-und-bündig-Lösung von Thomas:

{{{
   keytool -genkey -alias tomcat -keyalg RSA
   mv /root/.keystore /usr/share/tomcat4/
   chown tomcat4 /usr/share/tomcat4/.keystore
   chmod u+r  /usr/share/tomcat4/.keystore
   chmod go-rw  /usr/share/tomcat4/.keystore
}}}

Danach gibt es einen SSL-Zugang zum Tomcat auf Port 8443 (also am
besten mal mit {{{ https://hostname:8443/ }}} probieren).

Mit weiteren Einträgen in der web.xml kann man nun auch dafür
sorgen, daß unsere Web-Applikation nur noch SSL-Verbindungen
annimmt. Natürlich kann man auch die nicht-SSL-Connectoren aus der
server.xml entfernen, was dann für alle Tomcat-Appliaktionen gilt.
Damit hat man die optimale SSL-Sicherheit.


!!Client Authentifizierung

Weiterhin können sich auch Clients über ein SSL-Zertifikat beim
Server authentifizieren.

Genaueres dazu findet sich bei entwickler.de:
http://www.entwickler.de/zonen/portale/psecom,id,101,online,832,p,0.html

!!Links
*vergleiche auch unsere Seite zu OpenSSL
<<*[http://nodsw.com/blog/leeland/2006/12/06-no-more-unable-find-valid-certification-path-requested-target]*[http://blogs.sun.com/andreas/entry/no_more_unable_to_find]>> Java Programm, um ein selbstsigniertes Zertifikat in den Keystore der Java-Runtime zu importieren, nötig für SSL-Clients in Java
<<*[http://tvilda.stilius.net/java/java_ssl.php] SSL Tutorial für Java-Programmierer>>
<<*[http://shib.kuleuven.be/docs/ssl_commands.shtml] Wichtige Kommandos für SSL-Zertifikate
*[http://juliusdavies.ca/commons-ssl/] Java-SSL-Bibliothek
*[http://portecle.sourceforge.net/] Grafische Oberfläche für das Java-Keytool

>>-- PeterHormanns und ThomasBayen

<<\\>>
<<[{Tag;Kategorien:KategorieTomcat, <<Tomcat SSL Java CaCert Crypto}]KategorieJava