PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Apache Tomcat mit SSL und Client certificate



riseX
21.02.07, 11:40
Hallo,

also ... erstmal die Grundidee.

Ich schreibe Java Anwendung, welche Web Services zur Verfügung stellen soll. Diese Webservices sollen aber nur durch authorisierte Benutzer ausgeführt werden.

Für die Web Services benutze ich Apache Axis. Den Tomcat mit SSL Unterstützung bekomme ich ans Laufen. Sobald sich der Client aber mit dem Zertifikat anmelden soll, akzeptiert der Server das Zertifikat nicht. Ich probiere nun schon länger.

Hat jemand mal ein gutes HowTo für das Erstellen der Keys und der Zertifikate? Wie gesagt ... die SSL-Connection ohne Client Zertifikat funktioniert.

Oder wäre es besser einfach den Client mittels Passwort und Benutzerkennung nach Eröffnung der SSL Verbindung zu identifizieren?

Meine Grundidee ist, die Web Services nicht mit WS-Security abzusichern sondern doch den Weg per SSL zu gehen. Die Wahl fiel anstatt einer Client-Server Anwendung auf Web Services weil später der Client auch in .NET oder dergleichen realisiert werden soll.

Ich beschäftige mich noch nicht allzulang mit der ganzen Thematik und bin für Vorschläge, Erfahrungsberichte oder Verbesserungen absolut offen.

Gruß
vom riseX

marce
21.02.07, 11:49
evtl. hilft Dir das weiter:
http://www.linuxforen.de/forums/showpost.php?p=1418849&postcount=4

ansonsten:
http://tomcat.apache.org/tomcat-5.0-doc/ssl-howto.html

... sehr hilfreich ist dabei auch, den Loglevel so hoch wie möglich zu drehen - sowohl Apache als auch Tomcat sind da dann sehr geschwätzig und liefern recht viele und brauchbar-gute Infos...

riseX
21.02.07, 11:53
danke schön ... das werde ich mal ausprobieren.

temir
21.02.07, 16:14
Wenn eigene CA dem installierten Java-Paket als 'Trusted' zu Verfügung gestellt werden soll:


$JAVA_HOME/bin/keytool -import -noprompt -alias "MeineSuperCA" -file /pfad/zu/MeineSuperCA.cer -keystore $JAVA_HOME/lib/security/cacerts -storepass changeit

...denn Suns CA-Store Password ist bei der Auslieferung 'changeit' ;-)

EDIT:
Unter Windows gilt im Prinzip das gleiche, nur dass $JAVA_HOME zu %JAVA_HOME% wird und '/' zu '\'...

riseX
22.02.07, 09:14
Hab ich eigentlich die Möglichkeit ... die Zertifikate von der Client Authentifizierung für mehrere Clients verfügbar zu machen ... also sprich ich sage ... nur wenn ein Client kommt mit diesem bestimmten Zertifikat ... dann erlaube das?

marce
22.02.07, 09:18
Ja, das geht.

riseX
22.02.07, 09:23
danke .. das ging fix.

also kann ich diese Zertifikate hinterher an die personen verschicken, die zugriff auf den server mittels ssl haben sollen.

ist das eine ausreichende absicherung? ... oder gibt es da möglichkeiten die sinnvoller sind? ... sorry ich bin da noch etwas neu auf dem gebiet

marce
22.02.07, 09:27
Hm, "verschicken" wäre in kritischen Umgebungen der wunde Punkt - Sicherer wäre, z.B. per USB-Stick die Certs. manuell zu verteilen und dafür ein PW zu verwenden, welches der User nicht kennt sondern nur der Admin, der das dann lokal einrichtet. Dann noch Zertifikate mit beschränkter Gültigkeitsdauer und das sollte dann recht sicher sein...

Wie paranoid man ist sollte dann aber im jeweiligen Anwendungsfall unterschieden werden...

riseX
22.02.07, 12:39
Du scheinst Dich da ganz gut auszukennen.

hast Du vielleicht mal sone Step bei Step anleitung für den server ... erstellen der keystores ... keys ... zertifikate etc. und auch für das der pkcs12 zertifikate für den browser?

vielleicht noch ne genaue beschreibung des SSL parts in der tomcat server.xml

oder ist das zuviel verlangt? :)

Gruß vom riseX

marce
22.02.07, 12:46
was ich hier habe ist das, was ich Dir oben schon gepostet habe - das ist halt für Apache.

TomCat selbst habe ich in der Art mit SSL+Client-Certs nicht am laufen - ich denke aber mal, dass man da nicht allzuviel an der Config anpassen muss... Von dem her kann ich da leider kein HowTo bieten... - wobei ich mich mal hinsetzen könnte und versuchen, eines zu schreiben...

riseX
22.02.07, 14:52
Also ich bin zu dämlich :mad:

Ich habe einfach ein Problem damit ... das der Server immer die Zertifikate von dem Client ablehnt ... das liegt daran, dass ich schon Probleme beim Erstellen der PKCS12 Zerti's habe.

Ich beschreibe mal ungefähr meine Vorgehensweise.

private Key:

openssl genrsa -out ca.key 1024

Create the Self-Signed CA Certificate

openssl req -new -x509 -key ca.key -out demoCA/cacert.pem

Create a Keystores for the Client and Server

keytool -genkey -alias client -keystore newcerts

keytool -genkey -alias server -keystore newcerts

Export Keys from Keystores

keytool -keystore newcerts -certreq -alias client -file client.crs

Export Keys from Keystores

keytool -keystore newcerts -certreq -alias server -file server.crs

Sign Keys With the CA Certificate

openssl ca -in client.crs -out client.pem -keyfile ca.key

openssl ca -in server.crs -out server.pem -keyfile ca.key

Import CA Certificate and Keys into Keystores

keytool -keystore newcerts -alias systemca -import -file demoCA/cacert.pem

Bei den beiden folgenden Befehlen, bekomme ich dann mitgeteilt, dass sie nicht im x509-Format vorliegen.

Die einzigen Befehle, die ich gefunden habe, sind zum Erstellen von DER-Zerti's


keytool -keystore newcerts -alias clientapp -import -file clientapp.der

keytool -keystore newcerts -alias serverapp -import -file serverapp.der

Meine Tomcat server.xml lautet (nur der SSL-Teil)

<Connector port="8443"
maxHttpHeaderSize="8192"
maxThreads="150"
minSpareThreads="25"
maxSpareThreads="75"
enableLookups="false"
disableUploadTimeout="true"
acceptCount="100"
scheme="https"
secure="true"
clientAuth="true"
sslProtocol="TLS"
keystoreFile="C:\Programme\Java\jdk1.6.0\bin\newcerts"
keystorePass="xxx"
/>


EDIT: Also ich bekomme beim Erstellen des PKCS12-Zertifikats immer die Fehlermeldung:
No certificate matches private key



... *FRUST*

Danke schomma...

riseX
01.03.07, 09:28
Geholfen hat mir hier

http://www.vorburger.ch/blog1/2006/08/setting-up-two-way-mutual-ssl-with.html

ich hoffe, dass wird jedem auch helfen ... man muss darauf achten, dass in der server.xml der Connector korrekt eingetragen wird (auf Groß- und Kleinschreibung achten)

Gruß vom riseX

escaperig
07.09.07, 14:24
Hallo,

ich ordne mein Thema mal hier ein, da es schon behandelt wurde.

Ich habe einen Tomcat mit Clientauth. konfiguriert. Es sollen ca 500 Clientcerts erzeugt werden.

Wenn ich diese nun alle in den Serverkeystore speichere funktioniert dieser nicht mehr mit dem IE.

Kann mir jemand sagen wie ich den Tomcat Keystore bzw. Trusted Keystore mit so vielen Zertifikaten ans laufen bekomme? Geht das überhaupt oder muss ich mir eine eigene CA aufsetzen?

Viele Grüße