# Axis SOAP Client und https



## kama (20. Jun 2007)

Hallo,

ich habe mit Java 1.5+ Axis 1.3 einen Client programmiert, der einen Zugriff auf eine Plattform einwandfrei macht (näheres dazu unter http://jagosi.soebes.de).

Leider komme ich derzeit nicht weiter, da ich die Kommunikation per "https" laufen lassen möchte...

Ich habe hier im Forum gesucht, bin auf das hier gestossen, wo aber der Link auf das Kapitel nicht mehr gültig ist...

Sprich die Frage ist: Wie kann ich Axis bei bringen per https zu kommunizieren anstatt per http?

Vielen Dank im Voraus.
MfG
Karl Heinz Marbaise


----------



## HoaX (20. Jun 2007)

mal nach "axis https" gegooglet? ich hab nicht wirklich ahnung von axis, aber die links schauen vielversprechend aus ...


----------



## hofi (20. Jun 2007)

hängt davon ab ob der server auch ein zertifikat deines clients erwartet.
wenn nein, musst du einfach die folgenden properties vor dem aufruf setzten

System.setProperty("javax.net.ssl.trustStore", "pfad zu meinem truststore");
System.setProperty("javax.net.ssl.trustStorePassword", "mein passwort");

wenn ein zertifikat erwartet wird zusätzlich

System.setProperty("javax.net.ssl.keyStore", "pfad zu meinem keystore");
System.setProperty("javax.net.ssl.keyStorePassword", "passwort für mein keystore");

und natürlich nicht vergessen die ensprechende https - url zu verwenden  ;-)

aber wie schon erwähnt gibts dazu auch massenweise infos im netz


----------



## kama (21. Jun 2007)

Hallo,

zuerst einmal vielen Dank für eure Hilfe....hat mich einen dicken Schritt weiter gebracht:

Weiterhin habe ich nach einigem Lesen dann gefunden, womit ich jedes Zertifakt aktzeptiere (SunFakeTrustSocketFactory) kann (Testweise).

1. Folgende VM Parameter gesetzt, damit das SSL immer akzeptiert wird.


```
-Djavax.net.debug=all -Dorg.apache.axis.components.net.SocketFactory=org.apache.axis.components.net.SunFakeTrustSocketFactory
```

2. Folgenden Code eingefügt:

```
System.setProperty("javax.net.ssl.keyStore", "/usr/lib64/jvm/java-1.5.0-sun-1.5.0_update8/jre/lib/security/cacerts");
System.setProperty("javax.net.ssl.keyStorePassword ", "changeit");
```
So jetzt bekomme ich eine Ganze menge Ausgaben...so weit so gut...
aber dann kommt das folgenden:


```
main, READ: SSLv3 Alert, length = 2
main, RECV SSLv3 ALERT:  fatal, bad_record_mac
main, called closeSocket()
main, handling exception: javax.net.ssl.SSLException: Received fatal alert: bad_record_mac
AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
 faultSubcode: 
 faultString: javax.net.ssl.SSLException: Received fatal alert: bad_record_mac
 faultActor: 
 faultNode: 
 faultDetail: 
	{http://xml.apache.org/axis/}stackTrace:javax.net.ssl.SSLException: Received fatal alert: bad_record_mac
	at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:166)
	at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:117)
...
```


Das Problem scheint mir, dass wenn ich die Seite im Browser Aufrufe kommt zuerst, dass das Zertifikat von einer nicht anerkannten Stelle ist (sprich es ist selbst gebaut; Nichtmal von cacert..).
Dann muss ich das noch für die aktuelle Sitzung akzeptieren.

Kann es daran liegen?

EDIT:  -------- ANFANG
Habe jetzt auch nocht

```
System.setProperty("javax.net.ssl.trustStore", "/home/kama/.keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "123456");
```
und das Zertifikat per keytool -import -trustcacerts -file gforge.cer 
importiert und mit dem obigen Passwort versehen.

Aber die Exception Meldungen bleiben...
EDIT:  ---------- ENDE

EDIT2: Hatte die Konfiguration falsch eingestellt...Behoben..läuft jetzt alles.
Hm...

MfG
Karl Heinz Marbaise


----------

