Problem mit digitalen Signaturen auf Web Service Seite

closed

Neues Mitglied
Servus,

bin durch Zufall hier aufs Forum gestoßen und fühle mich mit meinem Anlegen hier gut aufgehoben :)

ICh habe einen Webservice und einen Client geschrieben. In dem Client erstelle ich mir manuell eine SOAP-Nachricht und übergebe ein paar Parameter an den WebService. Diese Parameter werden über eine Referenz signiert. Dazu nutze ich JAVAX. Soweit funktioniert sowohl das Signieren, als auch das unmittelbare validieren (Clientseite). Das Absenden (invoken) der Nachricht funktioniert auch.

Auf WebService Seite kommt Axis2 zum Einsatz.

Nun meine Frage: DA ich sehr sehr neu in dem ganzen Umfeld bin, würde ich mich über eine detaillierte Antwort freuen. Wie kann ich auf WebService Seite die Signatur validieren? ICh habe das Gefühl, dass ich die invoke()-Methode überschreiben muss mit einem Axis-Handler. Als IDE nutze ich Eclipse. Ich kann leider kein gutes Tutorial finden, dass mir beschreibt, wie ich mein Vorhaben in Eclipse umsetzen kann. Wenn ich die gesamte SOAP-Nachricht als Parameter an meine WebService-Methode übergeben kann, dann würde dies auch schon genügen, weil ich dann die Signatur extrahieren kann. Ich bin mir aber sicher, dass es eine standardisierte Vorgehensweise dabei gibt, die ich bisher noch nicht entdeckt habe.

Bin um jede Hilfe dankbar.

Thx
 

Keo

Mitglied
Axis2 nutzt das Modul Rampart um standardisiert die vier bekannten Sicherheitsanforderungen gerecht zu werden. Mit diesem Modul muss du nicht den Nachrichteninhalt auslesen um die Signatur zu validieren.
Hier bekommst du Infos zur WS-Security:
Axis2/Java - Rampart : WS-Security module for Axis2
Die WS-Security-Spec bietet dir sehr viele Möglichkeiten um den Webservice abzusichern. Da es sehr aufwendig ist, nutzt man meist für die Absicherung die Basic Authentifzhierung und TLS zur Verschlüsselung der Daten.
 

closed

Neues Mitglied
Hallo Keo,

danke für die Antwort. Rampart hatte ich mir schon angeschaut, das ganze schien mir aber viel u kompliziert. ICh habe es nun so gemacht, dass ich einen JAX-WS Handler geschrieben hat, der die Methode handleMessage() überschreibt. Diese wird direkt vor und nach dem Bearbeiten mit der WebService Klasse aufgerufen. Jetzt kann ich die SOAP-Message direkt bearbeiten bzw. validieren. Das Problem ist aber, dass mir Eclipse immer die Meldung bringt, dass er das Element mit der ID arg0 nicht finden könne.

Dieses Element habe ich direkt signiert und eine Referenz im signedInfo Tag erzeugt, Das validieren funktioniert auch soweit, wenn ich es direkt auf Client Seite überprüfe. Auf WebService Seite funktioniert es merkwürdigerweise nicht, obwohl die Nachricht komplett identisch ist und das Vorgehen ebenfalls.

Weiß da mittlerweile kaum weiter. Eventuell weißt du dazu ja ebenfalls etwas??!!

Besten Dank
 

Keo

Mitglied
hast du den Schlüssel direkt im SOAP-Body übergeben, also auch in der WSDL extra ein String-Feld spendiert? Normalerweise sollte man nur fachliche Inhalte im SOAP-Body definieren und die technischen Details z.B. im http-Header übergeben. Das würde dann auf Webservice-Seite wie folgt funktionieren:

Java:
MessageContext messageContext = MessageContext.getCurrentMessageContext();
	Map transportHeaders = (Map)messageContext
			.getProperty( MessageContext.TRANSPORT_HEADERS );
        String tmp = (String)transportHeaders.get( "your signinfo" );
        //tmp is content of your signinfo
Im Client würde ich dann den Schlüssel (z.B. 'singinfo abcdeksdfj') im http-Header übergeben und auf Serverseite -wie oben beschrieben- einlesen.

Vielleicht hilft dir das weiter:toll:
 

Ähnliche Java Themen

Neue Themen


Oben