SOAP-Nachrichten mit der Anwendungsprogrammierschnittstelle "WSSDecryption" entschlüsseln
Sie können die SOAP-Nachrichten ohne Verwendung von Richtliniensätzen für die Konfiguration sichern, indem Sie die Anwendungsprogrammierschnittstellen (API, Application Programming Interface) von Web Services Security (WSS-API) verwenden. Wenn Sie den Client für Entschlüsselung auf Antwortkonsumentenseite (Client) konfigurieren möchten, verwenden Sie die API "WSSDecryption", um die SOAP-Nachrichten zu entschlüsseln. Die API "WSSDecryption" gibt beim Konfigurieren des Clients an, welche Abschnitte der SOAP-Nachrichten entschlüsselt werden sollen.
Vorbereitende Schritte
Sie können die WSS-API oder Richtliniensätze in der Administrationskonsole verwenden, um die Entschlüsselung zu aktivieren und Konsumentensicherheitstoken in der SOAP-Nachricht hinzuzufügen. Zum Sichern der SOAP-Nachrichten müssen Sie die folgenden Entschlüsselungstasks ausgeführt haben:
- Die SOAP-Nachricht wurde verschlüsselt.
- Die Entschlüsselungsmethode wurde ausgewählt.
Informationen zu diesem Vorgang
Die Entschlüsselungsdaten auf der Konsumentenseite werden verwendet, um eine eingehende SOAP-Nachricht für die Antwortkonsumentenbindungen (Clientseite) zu entschlüsseln. Die Konfiguration des Clientkonsumenten muss mit der Konfiguration des Providergenerators übereinstimmen.
Vertraulichkeitseinstellungen erfordern, dass Vertraulichkeitsbedingungen auf generierte Nachrichten angewendet werden.
Die folgenden Entschlüsselungsabschnitte können konfiguriert werden:
Entschlüsselungsabschnitte | Beschreibung |
---|---|
part | Fügt das WSSDecryptPart-Objekt als Ziel für den Entschlüsselungsabschnitt hinzu. |
keyword | Fügt den Entschlüsselungsabschnitt mit Schlüsselwörtern hinzu. WebSphere
Application Server unterstützt die folgenden Schlüsselwörter:
|
xpath | Fügt den Entschlüsselungsabschnitt mit einem XPath-Ausdruck hinzu. |
verification | Fügt die WSSVerification-Instanz als Ziel des Entschlüsselungsabschnitts hinzu. |
header | Fügt den SOAP-Header nach QName als Ziel des Entschlüsselungsabschnitts hinzu. |
Bei der Entschlüsselung sind bestimmte Standardverhalten zu beobachten. Die WSS-API lässt sich am einfachsten über den Einsatz des Standardverhaltens verwenden (siehe Beispielcode). WSSDecryption stellt Standardeinstellungen für den Algorithmus für Schlüsselchiffrierung, den Algorithmus für Datenverschlüsselung und die Entschlüsselungsabschnitte, wie z. B. den Inhalt des SOAP-Hauptteils (Body) und die Signatur, bereit. Im Folgenden sind die Standardverhalten bei der Entschlüsselung beschrieben:
Entscheidungen bzgl. der Entschlüsselung | Standardverhalten |
---|---|
Zu entschlüsselnde Abschnitte | Die Standardentschlüsselungsabschnitte sind BODY_CONTENT und SIGNATURE. WebSphere Application Server unterstützt die folgenden Schlüsselwörter:
Nachdem Sie die zu entschlüsselnden Nachrichtenabschnitte angegeben haben, müssen Sie die Methode angeben, die zum Entschlüsseln der Konsumentenanforderungsnachricht verwendet werden soll. Wenn beispielsweise Signatur und Hauptteilinhalt für Verschlüsselung ausgewählt wurden, werden dieselben Abschnitte der SOAP-Nachricht auch entschlüsselt. |
Verschlüsselung des Schlüssels (isEncrypt) | Standardmäßig wird der Schlüssel verschlüsselt (true). |
Auszuwählender Algorithmus für Datenentschlüsselung (Methode) | Der Standardalgorithmus für die Datenentschlüsselung ist AES128. WebSphere Application Server unterstützt die folgenden Datenverschlüsselungsmethoden:
|
Auszuwählende Methode für Schlüsseldechiffrierung (Algorithmus) | Der Standardalgorithmus für die Schlüsseldechiffrierung ist RSA OAEP. WebSphere Application Server unterstützt die folgenden Methoden für die Schlüsselchiffrierung:
|
Anzugebendes Sicherheitstoken | Der Standardtyp für Sicherheitstoken ist X509. WebSphere Application Server stellt die folgenden vorkonfigurierten Typen von Konsumententoken bereit:
|
Vorgehensweise
Ergebnisse
Beispiel
Im folgenden Beispiel wird Code für die Entschlüsselung des Inhalts des SOAP-Nachrichtenhauptteils gezeigt:
// Nachrichtenkontext abrufen
Object msgcontext = getMessageContext();
// WSSFactory-Instanz erstellen (Schritt a)
WSSFactory factory = WSSFactory.getInstance();
// WSSConsumingContext-Instanz generieren (Schritt b)
WSSConsumingContext gencont = factory.newWSSConsumingContext();
// Callback-Handler generieren (Schritt c)
X509ConsumeCallbackHandler callbackHandler = new
X509ConsumeCallbackHandler(
"",
"enc-sender.jceks",
"jceks",
"storepass".toCharArray(),
"alice",
"keypass".toCharArray(),
"CN=Alice, O=IBM, C=US");
// WSSDecryption-Instanz generieren (Schritt d)
WSSDecryption dec = factory.newWSSDecryption(X509Token.class,
callbackHandler);
// Zu verschlüsselnden Abschnitt festlegen (Schritt e)
// STANDARD: WSSEncryption.BODY_CONTENT und WSSEncryption.SIGNATURE
// Zu verschlüsselnden Abschnitt festlegen (Schritt e)
// STANDARD: WSSEncryption.BODY_CONTENT und WSSEncryption.SIGNATURE
// Mit dem Schlüsselwort angegebenen Abschnitt festlegen (Schritt e)
dec.addRequiredDecryptPart(WSSDecryption.BODY_CONTENT);
// Mit dem QName angegebenen Abschnitt im SOAP-Header festlegen (Schritt e)
dec.addRequiredDecryptHeader(new
QName("http://www.w3.org/2005/08/addressing",
"MessageID"));
// Von WSSVerification angegebenen Abschnitt festlegen (Schritt e)
X509ConsumeCallbackHandler verifyCallbackHandler =
getCallbackHandler();
WSSVerification ver = factory.newWSSVerification(X509Token.class,
verifyCallbackHandler);
dec.addRequiredDecryptPart(ver);
// Mit dem XPath-Ausdruck angegebenen Abschnitt festlegen (Schritt e)
StringBuffer sb = new StringBuffer();
sb.append("/*[namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/'
and local-name()='Envelope']");
sb.append("/*[namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/'
and local-name()='Body']");
sb.append("/*[namespace-uri()='http://xmlsoap.org/Ping'
and local-name()='Ping']");
sb.append("/*[namespace-uri()='http://xmlsoap.org/Ping'
and local-name()='Text']");
dec.addRequiredDecryptPartByXPath(sb.toString());
// Mit dem QName angegebenen zu entschlüsselnden Abschnitt im SOAP-Header festlegen (Schritt e)
dec.addRequiredDecryptHeader(new
QName("http://www.w3.org/2005/08/addressing",
"MessageID"));
// Kandidaten für die Datenverschlüsselungsmethode festlegen (Schritt f)
// STANDARD: WSSDecryption.AES128
dec.addAllowedEncryptionMethod(WSSDecryption.AES128);
dec.addAllowedEncryptionMethod(WSSDecryption.AES192);
// Kandidaten für die Schlüsselchiffrierungsmethode festlegen (Schritt g)
// STANDARD: WSSDecryption.KW_RSA_OAEP
dec.addAllowedKeyEncryptionMethod(WSSDecryption.KW_TRIPLE_DES);
// Kandidaten für das für die Entschlüsselung zu verwendende Sicherheitstoken festlegen (Schritt h)
X509ConsumeCallbackHandler callbackHandler2 = getCallbackHandler2();
dec.addToken(X509Token.class, callbackHandler2);
// Festlegen, ob der Schlüssel in der eingehenden SOAP-Nachricht verschlüsselt werden soll (Schritt i)
// STANDARD: true
dec.encryptKey(true);
// WSSDecryption zu WSSConsumingContext hinzufügen (Schritt j)
concont.add(dec);
// WS-Security-Header validieren (Schritt k)
concont.process(msgcontext);
Nächste Schritte
Verwenden Sie die API "WSSDecryptPart", oder konfigurieren Sie Richtliniensätze über die Administrationskonsole, um entschlüsselte Abschnitte für die Konsumentennachricht hinzuzufügen.