Apache Tomcat SSL Zertifikat

PowerPaul86

Enthusiast
Thread Starter
Mitglied seit
14.08.2006
Beiträge
1.229
Hallo,

hoffe ich bin hier richtig.

Ich will meinem Tomcat Webserver ein offizielles Zertifikat geben, damit die Benutzer keine Warnung oder Ausnahme beim Aufruf bekommen.

Ich habe bereits private und public Key von unserer Zertifizierungsstelle bekommen und beide funktionieren einwandfrei im Apache Webserver.

Der Apache Tomcat Werbserver will das irgendwie mit seinen komischen keyfiles geregelt haben.

Ich habe es schon hinbekommen, dass eine selbsterstellte keyfile die SSL Verbindung aufbaut, aber halt nur mit ner Warnung an den Benutzer.

Meine 2 Dateien sind:

public key:
-----BEGIN CERTIFICATE-----
.
.
.
-----END CERTIFICATE-----
und private key:

-----BEGIN CERTIFICATE REQUEST-----
...
-----END CERTIFICATE REQUEST-----

Kann mir jemand helfen ich habe schon etliche Tutorials probiert auch die Tutorials von der öffentlichen Apache Tomcat Seite.


Ich bräuchte jemanden der das schonmal gemacht hat GLAUBE ICH, jedoch könnt ihr gerne auch Vorschläge machen. Ich bin gerne bereit eure Vorschläge zu zerpflücken ;)

Vielen Dank im Voraus!
 
Zuletzt bearbeitet:
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Ein Certificate Request als Private Key? :hmm:

Ein Certificate Request ist normalerweise eine Weiterverarbeitung des Public Keys, denn du dann von einer authorisierten Schlüsselverifizierungsstelle verifizieren lässt und dann von dieser dein offizielles und unterschriebenes Zertifikat bekommst.

Wer ist denn Zertifikatsaussteller bzw. -verifizierer?

Falls das nicht einer ist, der den offiziell von FF und IE akzeptierten Certificate Authorities angehört, kannst du das gleich erden, dann kommt die Fehlermeldung immer.

Ich habe mich vor einiger Zeit von cacert.org verifizieren lassen, mit zwei amtlichen Ausweisdokumenten und allem drum und dran, jetzt kann ich meine Zertifikate von denen signieren lassen, juckt aber FF und IE halt nicht, weil cacert keine Kohle zahlt um von FF und IE in die Liste der "offiziellen" aufgenommen zu werden...
 
Hai,

danke erstmal für den Versuch mir zu helfen ;)

Ich hab nochmal in die Datei meiner Zertifizierungsstelle geschaut.

DIe Datei heisst "signed-hostcert_request.pem" und unter dem
-----BEGIN CERTIFICATE REQUEST-----
...
-----END CERTIFICATE REQUEST-----

befindet sich noch
------F4E4C045B1C3121E6140095DC05A4CA0
Content-Type: application/x-pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"
.
.
.
------F4E4C045B1C3121E6140095DC05A4CA0--

Soll da so sein?
 
Ja, das kann schon sein, das ist dann die Signatur.

Wer ist denn deine Zertifizierungsstelle?
 
Die CA ist meine Firma, da auf unseren PCs ein Root-Zertifikat installiert ist.
 
Im Moment nur Intranet, aber später auch für das Internet gedacht, ob die von der CA ausgestellten dann auch für das ganze Internet gültig weiss ich nicht.

Aber um das geht es eigntl. nicht!
Ich bekomm das ja nicht hin diese Zertifikate in den Tomcat zu integrieren.
 
Doch, das spielt eine Rolle, weil ...

Ich habe es schon hinbekommen, dass eine selbsterstellte keyfile die SSL Verbindung aufbaut, aber halt nur mit ner Warnung an den Benutzer.

... deutet darauf hin, dass du das Zertifikat sehr wohl erfolgreich in Tomcat integriert hast (sonst würde er die Verbindung ja nicht aufbauen). Und die Warnung kommt eben daher, dass in Firefox oder Internet Explorer (was auch immer ihr benutzt) deine Firma halt nicht als authorisierter Zertifikatsaussteller akzeptiert ist und deswegen die Fehlermeldung kommt...

Poste mal bitte die Fehlermeldung....
 
Nee, du hast mich falsch verstanden.

Ich hab es geschafft mit einer selbst erstellten Keystore Datei eine SSL Vernindung aufzubauen, diese Datei hat kein Zertifikat einer CA in sich, sondern ist eine pure Keystore Datei erstellt durch den Befehl
paul@iwrpaul :~$ $JAVA_HOME /bin/ keytool -genkey -alias tomcat -keyalg RSA

Also nix mit Zertifikat usw.

edit: was fürne Fehlermeldung ich hab da viel zu bieten :)

Geb mir ein Link mit nem Tutorial oder sag mir wie es eigntl gehen sollte, dann kann ich dich mit Fehlermeldungen zu spammen ;)
 
Zuletzt bearbeitet:
Achso, dann hab ich dich wirklich falsch verstanden... :fresse:

Kannst du dann bitte nochmal posten was in der signed-hostcert_request.pem alles für blöcke drin waren?
 
klar hier die entschärfte verison, falls ich da doch noch angaben drinnen habe, die ich nicht veröffentlichen sollte, wirst du mich doch bestimmt darauf hinweisen, oder? :)

MIME-Version: 1.0
Content-Type: multipart/signed; protocol="application/x-pkcs7-signature"; micalg=sha1; boundary="----F4E4C045B1C3121E6140095DC05A4CA0"

This is an S/MIME signed message

------F4E4C045B1C3121E6140095DC05A4CA0
Content-Type: text/plain

This is a Certificate Request file:

It should be mailed to GridKa-CA@iwr.fzk.de


=========================================================================
Certificate Subject:

/O=GermanGrid/OU=FZK/CN=iwrpaul.ka.fzk.de

The above string is known as your host certificate subject, and it
uniquely identifies this host.

To install this host certificate, please save this e-mail message
into the following file.


/grid/fzk.de/home/roth/certs/paul/hostcert.pem


You need not edit this message in any way. Simply
save this e-mail message to the file.



If you have any questions about the certificate contact
the GridKa-CA at GridKa-CA@iwr.fzk.de

-----BEGIN CERTIFICATE REQUEST-----
############## HIER STAND WAS ##################
-----END CERTIFICATE REQUEST-----

------F4E4C045B1C3121E6140095DC05A4CA0
Content-Type: application/x-pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"

############## HIER STAND WAS ##################

------F4E4C045B1C3121E6140095DC05A4CA0--
 
Gut, dann kopier mal den Teil...

------F4E4C045B1C3121E6140095DC05A4CA0
Content-Type: application/x-pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"

############## HIER STAND WAS ##################

------F4E4C045B1C3121E6140095DC05A4CA0--

... in eine Datei, die du z.b. cert.pm nennst und tu die mit

keytool -import -v -trustcacerts -alias tomcat -file cert.pem

importieren. Was passiert dann?

Edit: http://www.torsten-horn.de/techdocs/ssl.htm
 
ähhhhhhh Ich hab grad nochmal geschaut.

Ich habe noch ne Datei die beihaltet folgendes:
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----

Soll ich dann trotzdem dein Vorschlag machen oder mit der Datei?

edit: vllt sollte ich da hier auch posten:

paul@iwrpaul:/srv/tomcat6$ keytool -list
Geben Sie das Keystore-Passwort ein:

Keystore-Typ: JKS
Keystore-Provider: SUN

Ihr Keystore enthält 2 Einträge.

tomcat, 05.08.2008, trustedCertEntry,
Zertifikatsfingerabdruck (MD5): ############## HIER STAND WAS ##################
tomcatssl, 12.08.2008, PrivateKeyEntry,
Zertifikatsfingerabdruck (MD5): ############## HIER STAND WAS ##################

edit2:

warhscheinlich biste jetzt eh essen, aber ich poste es trotzdem mal

Ich hab zum testen nochmal eine keystore file angelegt, dass ist der tomcatssl eintrag.
den habe ich jetzt wieder entfernt mit:
keytool -delete -alias tomcatssl

Soll ich jetzt eine neue keyfile mit neuem alias anlegen, um dein vorschlag
keytool -import -v -trustcacerts -alias tomcat -file cert.pem
zu testen?
 
Zuletzt bearbeitet:
Sorry, war tatsächlich essen... ;)

Na, den private key brauchen wir natürlich auch. Kopier das bitte mal alles in eine .pem Datei, also den public key, den private key und das signierte zertifikat und dann entfern mal die alten keyfiles aus tomcat und lad deins rein.
 
So ich hab ne threesome.pem datei angelegt:
------F4E4C045B1C3121E6140095DC05A4CA0
Content-Type: application/x-pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"

############## HIER STAND WAS ##################

------F4E4C045B1C3121E6140095DC05A4CA0--

-----BEGIN RSA PRIVATE KEY-----
############## HIER STAND WAS ##################
-----END RSA PRIVATE KEY-----

-----BEGIN CERTIFICATE-----
############## HIER STAND WAS ##################
-----END CERTIFICATE-----

danach:

paul@iwrpaul:/srv/tomcat6/ssl-cert$ keytool -import -v -trustcacerts -alias apachetomcat -file threesome.pem
Geben Sie das Keystore-Passwort ein:
Keytool-Fehler: java.lang.Exception: Eingabe kein X.509-Zertifikat
java.lang.Exception: Eingabe kein X.509-Zertifikat
at sun.security.tools.KeyTool.addTrustedCert(KeyTool.java:1913)
at sun.security.tools.KeyTool.doCommands(KeyTool.java:818)
at sun.security.tools.KeyTool.run(KeyTool.java:172)
at sun.security.tools.KeyTool.main(KeyTool.java:166)

Es gibt beim keytool -list kein eintrag mit dem alias "apachetomcat", das sollte er doch dann anlegen oder?

edit:
Ich hab nochmal recherchiert:
Unter http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/keytool.html#importCmd
steht ja der obere Befehl und auch
In the latter case, the encoding must be bounded at the beginning by a string that starts with "-----BEGIN", and bounded at the end by a string that starts with "-----END".
Auch der Grund diesen Befehl auszuführen müsste ja stimmen, um "to import a certificate reply received from a CA as the result of submitting a Certificate Signing Request (see the -certreq command) to that CA. "

Aber wenn da doch steht es müsste sowas mit -----BEGIN und END dastehen, dann stimmt das zwischen diesen Zeilen nicht?
 
Zuletzt bearbeitet:
Ist das nicht das hier:

-----BEGIN CERTIFICATE-----
############## HIER STAND WAS ##################
-----END CERTIFICATE-----
?

Weil diese Datei, habe ich von den CA Stelle bekommen.
 
Zuletzt bearbeitet:
Ja, da steht ja das begin und end dabei. Wenn du das in die .pem Datei kopierst (alleine ohne andere Sachen) und die versuchst zu installieren, geht das?
 
Ok in threesome.pem steht nurnoch:
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

dann

paul@iwrpaul:/srv/tomcat6/ssl-cert$ keytool -import -v -trustcacerts -alias apachetomcat -file threesome.pem
Geben Sie das Keystore-Passwort ein:
Zertifikat in Keystore bereits unter Alias <tomcat> vorhanden
Möchten Sie es trotzdem hinzufügen? [Nein]: ja
Zertifikat wurde zu Keystore hinzugefügt.
[/home/paul/.keystore wird gesichert.]

Wenn ich in die threesome.pem jetzt nur noch folgendes drinnen lasse:

-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----

kommt folgendes:

paul@iwrpaul:/srv/tomcat6/ssl-cert$ keytool -import -v -trustcacerts -alias apachetomcat -file threesome.pem
Geben Sie das Keystore-Passwort ein:
Keytool-Fehler: java.lang.Exception: Zertifikat nicht importiert, Alias <apachetomcat> bereits vorhanden
java.lang.Exception: Zertifikat nicht importiert, Alias <apachetomcat> bereits vorhanden
at sun.security.tools.KeyTool.addTrustedCert(KeyTool.java:1903)
at sun.security.tools.KeyTool.doCommands(KeyTool.java:818)
at sun.security.tools.KeyTool.run(KeyTool.java:172)
at sun.security.tools.KeyTool.main(KeyTool.java:166)

oder wenn ich einen neuen Alias vergeben will:

paul@iwrpaul:/srv/tomcat6/ssl-cert$ keytool -import -v -trustcacerts -alias apachetomcat2 -file threesome.pem
Geben Sie das Keystore-Passwort ein:
Keytool-Fehler: java.lang.Exception: Eingabe kein X.509-Zertifikat
java.lang.Exception: Eingabe kein X.509-Zertifikat
at sun.security.tools.KeyTool.addTrustedCert(KeyTool.java:1913)
at sun.security.tools.KeyTool.doCommands(KeyTool.java:818)
at sun.security.tools.KeyTool.run(KeyTool.java:172)
at sun.security.tools.KeyTool.main(KeyTool.java:166)

Wenn ich jetzt in der server.xml meinen bisherigen Eintrag:

<Connector
port="8443" minSpareThreads="5" maxSpareThreads="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="/srv/tomcat6/.keystore2"
keystorePass="HIER STAND WAS" keystorePassword="HIER STAND WAS"
storepass="HIER STAND WAS" keypass="HIER STAND WAS"
clientAuth="false" sslProtocol="TLS"
/>

in folgendes umwandele: (dabei wurde die keystore Datei hier aus dem home verzeichnis kopiert!)

<Connector
port="8443" minSpareThreads="5" maxSpareThreads="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="/srv/tomcat6/ssl-cert/.keystore"
keystorePass="HIER STAND WAS" keystorePassword="HIER STAND WAS"
storepass="HIER STAND WAS" keypass="HIER STAND WAS"
clientAuth="false" sslProtocol="TLS"
/>

Steht in den Apache TOmcat Logs folgendes beim Versuch ihn wieder zu starten:

20.08.2008 15:01:06 org.apache.tomcat.util.net.JIoEndpoint$Acceptor run
SCHWERWIEGEND: Socket accept failed
java.net.SocketException: SSL handshake errorjavax.net.ssl.SSLException: No available certificate or key corresponds to the SSL cipher suites which are enabled.
at org.apache.tomcat.util.net.jsse.JSSESocketFactory.acceptSocket(JSSESocketFactory.java:150)
at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:310)
at java.lang.Thread.run(Thread.java:619)

edit: Nochmal jetzt keytool -list ausgeführt:

paul@iwrpaul:/srv/tomcat6/logs$ keytool -list
Geben Sie das Keystore-Passwort ein:

Keystore-Typ: JKS
Keystore-Provider: SUN

Ihr Keystore enthält 2 Einträge.

apachetomcat, 20.08.2008, trustedCertEntry,
Zertifikatsfingerabdruck (MD5): ############## HIER STAND WAS ##################
tomcat, 05.08.2008, trustedCertEntry,
Zertifikatsfingerabdruck (MD5): ############## HIER STAND WAS ##################
Hinzugefügter Post:
Ich mache lieber mal einen Doppelt Posting zur Übersichtlichkeit:

Laut diesem How-To
http://tomcat.apache.org/tomcat-5.5-doc/ssl-howto.html#Troubleshooting

Steht die oben stehende Fehlermeldung
o available certificate or key corresponds to the SSL cipher suites which are enabled.
mit der angeblichen Lösung den keyAlias in dem Connector Tag in der server.xml anzugeben.
Gesagt, getan:
<Connector
port="8443" minSpareThreads="5" maxSpareThreads="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keyAlias="apachetomcat"
keystoreFile="/srv/tomcat6/.keystore2"
keystorePass="HIER STAND WAS" keystorePassword="HIER STAND WAS"
storepass="HIER STAND WAS" keypass="HIER STAND WAS"
clientAuth="false" sslProtocol="TLS"
/>

So, jetzt wieder neugestartet kommt folgende Fehlermeldung:

SCHWERWIEGEND: Error starting endpoint
java.io.IOException: Alias name apachetomcat does not identify a key entry
at org.apache.tomcat.util.net.jsse.JSSESocketFactory.getKeyManagers(JSSESocketFactory.java:415)
at org.apache.tomcat.util.net.jsse.JSSESocketFactory.init(JSSESocketFactory.java:381)
at org.apache.tomcat.util.net.jsse.JSSESocketFactory.createSocket(JSSESocketFactory.java:125)
[...]
 
Zuletzt bearbeitet:
SSL im Apache Tomcat 6

Hallo, hab da mal ne Frage, hat das einbinden des SSL Zertifikates eigentlich jetzt funktioniert? Wenn ja, ich bin fast am verzweifeln, das INternet gibt auch nicht wirklich was her. Könntest du mir bitte schreiben, wie du die Zertifikate eingebunden hast?

Ich habe den Apache Tomcat 6 installiert und habe einen Private Key (im Moment in Form einer TXT datei) und das Zertifikat (im Moment auch in Form einer TXT)

Wie erstelle ich nun den Keystore und wie füge ich das zertifikat und den private key da ein? Muß man das überhaupt?

Hoffe du kannst mir helfen...

Viele Grüße Stephan
 
Also ich habe es nicht geschafft unsere Zertifikate mit dem Tomcat kompatibel zu machen.
Da wir aber sowieso komplett vom Apache Tomcat auf den SUN Glassfish umziehen, da die Web Applikationen und firmeninterne Zertifikate dort ohne Probleme funktionieren, bringt es für mich nichts sich damit rumzuschlagen.

Also kann ich dir leider nicht helfen :/
Vllt. kannst du da ja auch den Glassfish verwenden, obwohl ich da auch nicht weiss wie das genau geht, da das ein Kollege macht.
 
Hallo,
ich hatte bis gestern Abend mit dem gleichen Problem zu kämpfen. Ursache ist dass man mit keytool keinen Schlüssel importieren kann (in den keystore). Die Lösung ist hier beschrieben:

http://www.agentbob.info/agentbob/79-AB.html

Das wird dann auf folgende Schritte hinauslaufen:

Zu Beginn habe ich die beiden Files
www.domain.de.key = Datei mit Private Key (-----BEGIN RSA PRIVATE KEY----- etc)
www.domain.de.crt = Datei mit Zertifikat (-----BEGIN CERTIFICATE----- etc)

zertifikat umwandeln:
openssl pkcs8 -topk8 -nocrypt -in www.domain.de.key -inform PEM -out www.domain.de.key.der -outform DER

privatekey umwandeln:
openssl x509 -in www.domain.de.crt -inform PEM -out www.domain.de.crt.der -outform DER

In keystore imporieren:
java ImportKey www.domain.de.key.der www.domain.de.crt.der

importkey.keystore (o.ä) aus Userfolder kopieren und umbennen in (Ich habe keystore.dat genommen und ins tomcat/conf verzeichnis gepackt)

Alias umbennen und Passwörter ändern (default ist importkey)
keytool -keystore keystore.dat -storepasswd -new NEUESPASSWORT
keytool -keystore keystore.dat -changealias -alias importkey -destalias www.domain.de
keytool -keystore keystore.dat -keypasswd -alias www.domain.de -new NEUESPASSWORT

Hier meine Config (server.xml) für Tomcat 5.0

Connector port="8443" maxThreads="20" minSpareThreads="5"
maxSpareThreads="10" enableLookups="false" disableUploadTimeout="true"
acceptCount="100" debug="0" scheme="https" secure="true"

Factory clientAuth="false" protocol="TLS" keyAlias="www.domain.de"
keystoreFile="conf\keystore.dat" keystorePass="NEUESPASSWORT"
/Factory

/Connector

Da ich vorher die gleiche Exception beim Hochfahren hatte sollte dies denke ich das Problem lösen.
 
Zuletzt bearbeitet:
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh