# Axis2 mit SSL verschlüsseln



## Intrun (14. Apr 2008)

Hallo Java-Gemeinschaft,

ich möchte meinen Webservice gerne mit SSL-Verschüsselung anlegen, damit der Datentransfer sicherer wird. Zum Testen habe ich ein Zertifikat (.jks) aus dem Internet geladen und in Tomcat die entsprechenen Einstellungen gemacht:

Änderung in server.xml:


```
<Connector port="8443" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" disableUploadTimeout="true"
               acceptCount="100" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS"           
               keystoreFile="conf/server.jks" 
               keystorePass="password" />
```

Das Zertifikat liegt unter TOMCAT_HOME/conf/server.jks. Dem Axis2-Client  habe ich nur die URL geändert: https://localhost:8443/axis2/services/....

Leider bekommt mein Client überhaupt keine Connection zum Port 8443. Habe ich da irgendwas nicht beachtet? Braucht mein Client auch ein Zertifikat um sich mit den Webservice zu authentifizieren.?

Bitte um Hilfe.


----------



## joern1 (14. Apr 2008)

OK. Ich versuche es mal anhand einer gesicherten https Verbindung zu einem Server zu erklären:

1.) Server hat ein Zertifikat . Entweder ein gekauftes von einer CA oder ein selbst erstelltes.
2.) Browser hat Zertifikate von verschiedenen renomierten CAs 

Es sind also 2 Zertifikate:

3.) Client sendet Request   ( Versand des öffentlichen Schlüssels) Dieser Schlüssel ist allgemein bekannt.
Liegt so im Browser rum, um wartet darauf benutzt zu werden.

4.) Server hat eine Digitale Signatur. Diese enthält einen 2. Schlüssel , den privaten Schlüssel .


Zusammen ergibt sich also ein Schlüsselpaar . Der Schlüssel des Servers muss unbedingt geheim bleiben.
Deshalb heißt er auch privater Schlüssel.

Wenn der Public Keys mit der Hashsumme des Private Keys übereinstimmt, ist alles OK.

Die Zertifizierung war erfolgreich.  Das ganze ist dann ein asymmetrisches Verschlüsselungsverfahren ...


VG
Jörn


----------



## Niki (16. Apr 2008)

Ich hatte gestern genau die selbe Anforderung. Hab vom Server das .cer File bekommen. Aus dem hab ich mir mittels portecle ein .jks File generiert. Das ganze brauchst du am Client nur mehr so einbinden:

```
InputStream is = new FileInputStream(new File("cert",
				"mein_clientzertifikat.jks"));
		KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
		keyStore.load(is, "mein_passwort".toCharArray());
		is.close();
```

Ich hab das ganze zwar mit Axis gemacht, funktioniert aber bei axis2 sicher auch so. Was man am Server einrichten muss weiß ich nicht, da das der Admin gemacht hat. Aber die https Verbindung funktioniert.


----------



## Intrun (16. Apr 2008)

Hi Niki,

was ist denn eigentlich dieses .jks? Hast Du nur diese Datei im keyStore geladen ohne irgendwie die SystemProperites zu setzen?

Sorry, ich kenne mich da überhaupt nicht aus. Ich habe die Schlüsselpaare, wie oben beschrieben, aus einem Tutorial im Internet genieriert. Was die einzelnen Dateien .ts und .ks bedeuten, weiss ich leider nicht:-(

Mein Problem ist noch immer, wie ich den Tomcat auf ssl einrichten kann. Die o.g. Beschreibung scheint noch fehlerhaft zu sein.


----------



## Niki (16. Apr 2008)

Die .jks dürfte dieses KeyStore-File für den Client sein. Mehr als der Code von mir ist auf Client-Seite nicht nötig. Also keine System-Properties.
Wie gesagt, bei der Tomcat-Konfiguration kann ich leider nicht weiter helfen.


----------

