SOAP-Nachricht mit der Anwendungsprogrammierschnittstelle "WSSEncryption" verschlü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 die Anforderungsverschlüsselung auf der Generatorseite konfigurieren möchten, verwenden Sie die API "WSSEncryption", um die SOAP-Nachricht zu verschlüsseln. Die API "WSSEncryption "gibt beim Konfigurieren des Clients an, welche Abschnitte der SOAP-Anforderungsnachricht verschlüsselt werden sollen.

Vorbereitende Schritte

Sie können die WSS-API oder Richtliniensätze in der Administrationskonsole verwenden, um die Verschlüsselung zu aktivieren und Generatorsicherheitstoken in der SOAP-Nachricht hinzuzufügen. Führen Sie zum Sichern von SOAP-Nachrichten mit den WSS-APIs die folgenden Verschlüsselungstasks aus:

  • Konfigurieren Sie mit der API "WSSEncryption" die Verschlüsselung, und wählen Sie die Verschlüsselungsmethoden aus.
  • Konfigurieren Sie mit der API "WSSEncryptPart" die verschlüsselten Abschnitte.

Informationen zu diesem Vorgang

Die Verschlüsselungsdaten auf der Generatorseite werden für die Verschlüsselung einer abgehenden SOAP-Nachricht für die Anforderungsgeneratorbindungen (Clientseite) verwendet. Die Konfiguration des Clientgenerators muss mit der Konfiguration des Providerkonsumenten übereinstimmen.

Mit der API WSSEncryption eine abgehende SOAP-Nachricht verschlüsseln

Vertraulichkeitseinstellungen erfordern, dass Vertraulichkeitsbedingungen auf generierte Nachrichten angewendet werden. Zu diesen Bedingungen gehört auch, welche Nachrichtenabschnitte in der generierten Nachricht verschlüsselt sein müssen und welchen Nachrichtenabschnitten verschlüsselte Nonce- und Zeitmarkenelemente zugeordnet sein müssen.

Die folgenden Verschlüsselungsabschnitte können konfiguriert werden:

Tabelle 1. Verschlüsselungsabschnitte. Verwenden Sie die Verschlüsselungsabschnitte in Nachrichten, um die Verschlüsselung zu aktivieren.
Verschlüsselungsabschnitte Beschreibung
part Fügt das WSSEncryptPart-Objekt als Ziel des Verschlüsselungsabschnitts hinzu.
keyword Fügt Verschlüsselungsabschnitte mit Schlüsselwörtern hinzu. WebSphere Application Server unterstützt die folgenden Schlüsselwörter:
  • BODY_CONTENT
  • SIGNATURE
xpath Fügt den Verschlüsselungsabschnitt mit einem XPath-Ausdruck hinzu.
signature Fügt die WSSignature-Komponente als Ziel des verschlüsselten Abschnitts hinzu.
header Fügt den SOAP-Header nach QName als Ziel des Verschlüsselungsabschnitts hinzu.
securityToken Fügt das SecurityToken-Objekt als Ziel des verschlüsselten Abschnitts hinzu.

Bei der Verschlüsselung sind bestimmte Standardverhalten zu beobachten. Die API "WSSEncryption" lässt sich am einfachsten über den Einsatz des Standardverhaltens verwenden (siehe Beispielcode).

WSSEncryption stellt Standardeinstellungen für den Algorithmus für Schlüsselchiffrierung, den Algorithmus für Datenverschlüsselung, die Methode für Sicherheitstokenreferenzen und die Verschlüsselungsabschnitte, wie z. B. den Inhalt des SOAP-Hauptteils (Body) und die Signatur, bereit. Im Folgenden sind die Standardverhalten bei der Verschlüsselung beschrieben:

Tabelle 2. Entscheidungen bzgl. der Verschlüsselung. Verwenden Sie das Standardverhalten für Verschlüsselung, um den Nachrichteninhalt und die Signatur zu schützen.
Entscheidungen bzgl. der Verschlüsselung Standardverhalten
Mit Schlüsselwörtern zu verschlüsselnde SOAP-Nachrichtenabschnitte

Legt über Schlüsselwörter die Verschlüsselungsabschnitte fest, die Sie hinzufügen können. Die Standardverschlüsselungsabschnitte sind BODY_CONTENT und SIGNATURE. WebSphere Application Server unterstützt die folgenden Schlüsselwörter:

  • WSSEncryption.BODY_CONTENT
  • WSSEncryption.SIGNATURE
Auszuwählende Methode für Datenverschlüsselung (Algorithmus)

Legt die Methode für Datenverschlüsselung fest. Es können Methoden für Datenverschlüsselung und Schlüsselchiffrierung angegeben werden. Die Standardalgorithmusmethode für die Datenverschlüsselung ist AES 128. WebSphere Application Server unterstützt die folgenden Datenverschlüsselungsmethoden:

  • WSSEncryption.AES128: http://www.w3.org/2001/04/xmlenc#aes128-cbc
  • WSSEncryption.AES192: http://www.w3.org/2001/04/xmlenc#aes192-cbc
  • WSSEncryption.AES256: http://www.w3.org/2001/04/xmlenc#aes256-cbc
  • WSSEncryption.TRIPLE_DES: http://www.w3.org.2001/04/xmlenc#tripledes-cbc
Verschlüsselung des Schlüssels (isEncrypt)

Gibt an, ob der Schlüssel verschlüsselt werden soll. Die gültigen Werte sind true und false. Standardmäßig wird der Schlüssel verschlüsselt (true).

Auszuwählende Methode für Schlüsselchiffrierung (Algorithmus)

Legt die Methode für die Schlüsselchiffrierung fest. Es können Methoden für Datenverschlüsselung und Schlüsselchiffrierung angegeben werden. Die Standardalgorithmusmethode für die Schlüsselchiffrierung ist RSA OAEP. WebSphere Application Server unterstützt die folgenden Methoden für die Schlüsselchiffrierung:

  • WSSEncryption.KW_AES128: http://www.w3.org/2001/04/xmlenc#kw-aes128
  • WSSEncryption.KW_AES192: http://www.w3.org/2001/04/xmlenc#kw-aes192
  • WSSEncryption.KW_AES256: http://www.w3.org/2001/04/xmlenc#kw-aes256
  • WSSEncryption.KW_RSA_OAEP: http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p
  • WSSEncryption.KW_RSA15: http://www.w3.org/2001/04/xmlenc#rsa-1_5
  • WSSEncryption.KW_TRIPLE_DES: http://www.w3.org/2001/04/xmlenc#kw-tripledes
Anzugebendes Sicherheitstoken (securityToken)

Legt das SecurityToken fest. Der Standardtyp für Sicherheitstoken ist X509Token. WebSphere Application Server stellt die folgenden vorkonfigurierten Typen von Konsumententoken bereit:

  • Abgeleitetes Schlüsseltoken
  • X.509-Token
Zu verwendende Tokenreferenz (refType) Legt den Typ der Sicherheitstokenreferenz fest. Die Standardtokenreferenz ist SecurityToken.REF_KEYID. WebSphere Application Server unterstützt die folgenden Tokenreferenztypen:
  • SecurityToken.REF_KEYID
  • SecurityToken.REF_STR
  • SecurityToken.REF_EMBEDDED
  • SecurityToken.REF_THUMBPRINT
Verwendung von MTOM (mtomOptimize) Legt die MTOM-Optimierung (Message Transmission Optimization Mechanism) für den verschlüsselten Abschnitt fest.

Vorgehensweise

  1. Wenn Sie die SOAP-Nachricht mithilfe der Anwendungsprogrammierschnittstelle "WSSEncryption" verschlüsseln möchten, müssen Sie zuerst sicherstellen, dass der Anwendungsserver installiert ist.
  2. Der WSS-API-Prozess zur Verschlüsselung teilt sich in die folgenden Schritte auf:
    1. Mit WSSFactory.getInstance() die Instanz der WSS-API-Implementierung abrufen.
    2. WSSGenerationContext-Instanz aus der WSSFactory-Instanz erstellen.
    3. Für Verschlüsselung verwendetes SecurityToken aus WSSFactory erstellen.
    4. Mit dem SecurityToken die WSSEncryption aus der WSSFactory-Instanz erstellen. Standardmäßig verschlüsselt WSSEncryption den Inhalt des Hauptteils und die Signatur.
    5. Einen neuen zu verschlüsselnden Abschnitt in WSSEncryption hinzufügen, wenn der vorhandene Abschnitt nicht angemessen ist. Nach dem Aufruf von addEncryptPart(), addEncryptHeader() oder addEncryptPartByXPath() wird der Standardabschnitt gelöscht.
    6. encryptKey(false) aufrufen, wenn der Schlüssel nicht chiffriert werden soll.
    7. Datenverschlüsselungsmethode festlegen, wenn die Standardmethode nicht angemessen ist.
    8. Methode für die Schlüsselchiffrierung festlegen, wenn die Standardmethode nicht angemessen ist.
    9. Tokenreferenz festlegen, wenn die Standardtokenreferenz nicht angemessen ist.
    10. WSSEncryption zu WSSConsumingContext hinzufügen.
    11. WSSGenerationContext.process() mit dem SOAPMessageContext aufrufen.

Ergebnisse

Wenn bei der Verschlüsselung eine Fehlerbedingung eintritt, wird eine Ausnahme vom Typ "WSSException" angezeigt. Bei erfolgreicher Ausführung wird WSSGenerationContext.process() von der API aufgerufen, der WS-Security-Header generiert und die SOAP-Nachricht damit über Web services Security gesichert.

Beispiel

Im folgenden Beispielcode werden Methoden verwendet, die in WSSEncryption definiert sind:

// Nachrichtenkontext abrufen
   Object msgcontext = getMessageContext();

// WSSFactory-Instanz erstellen (Schritt a)
WSSFactory factory = WSSFactory.getInstance();		

// WSSGenerationContext-Instanz generieren (Schritt b)
WSSGenerationContext gencont = factory.newWSSGenerationContext();

// Callback-Handler generieren
X509GenerateCallbackHandler callbackHandler = new 
         X509GenerateCallbackHandler(
			  "",
			  "enc-sender.jceks",
			  "jceks", 
			  "storepass".toCharArray(), 
			  "bob", 
			  null, 
			  			  "CN=Bob, O=IBM, C=US", 
			  null); 
// Für die Verschlüsselung verwendetes Sicherheitstoken generieren (Schritt c)
SecurityToken token = factory.newSecurityToken(X509Token.class , callbackHandler);

// WSSEncryption-Instanz generieren (Schritt d)
WSSEncryption enc = factory.newWSSEncryption(token);

// Zu verschlüsselnden Abschnitt festlegen (Schritt e)
// STANDARD: WSSEncryption.BODY_CONTENT und WSSEncryption.SIGNATURE

// Mit dem Schlüsselwort angegebenen Abschnitt festlegen (Schritt e)
   enc.addEncryptPart(WSSEncryption.BODY_CONTENT);

// Mit dem QName angegebenen Abschnitt im SOAP-Header festlegen (Schritt e)
   enc.addEncryptHeader(new QName("http://www.w3.org/2005/08/addressing",
                                  "MessageID"));

// Von WSSSignature angegebenen Abschnitt festlegen (Schritt e)
   SecurityToken sigToken = getSecurityToken();
      WSSSignature sig = factory.newWSSSignature(sigToken);
   enc.addEncryptPart(sig);

// Von SecurityToken angegebenen Abschnitt festlegen (Schritt e)
   UNTGenerateCallbackHandler untCallbackHandler = 
	         	         new UNTGenerateCallbackHandler("Chris", "sirhC");		
      SecurityToken unt = factory.newSecurityToken(UsernameToken.class, 
                                                   untCallbackHandler);
   enc.addEncryptPart(unt, false);

// 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']");
   enc.addEncryptPartByXPath(sb.toString());

// Festlegen, ob der Schlüssel chiffriert wird (Schritt f)
// STANDARD: true
   enc.encryptKey(true);

// Datenverschlüsselungsmethode festlegen (Schritt g)
// STANDARD: WSSEncryption.AES128
   enc.setEncryptionMethod(WSSEncryption.TRIPLE_DES);

// Methode für Schlüsselchiffrierung festlegen (Schritt h)
// STANDARD: WSSEncryption.KW_RSA_OAEP
   enc.setEncryptionMethod(WSSEncryption.KW_RSA15);

// Tokenreferenz festlegen (Schritt i)
// STANDARD: SecurityToken.REF_KEYID
	 	 enc.setTokenReference(SecurityToken.REF_STR);

// WSSEncryption zu WSSGenerationContext hinzufügen (Schritt j)
  gencont.add(enc);

// WS-Security-Header verarbeiten (Schritt k)
gencont.process(msgcontext);
Anmerkung: Der X509GenerationCallbackHandler benötigt das Schlüsselkennwort nicht, weil der öffentliche Schlüssel für die Verschlüsselung verwendet wird. Sie benötigen kein Kennwort, um den öffentlichen Schlüssel aus dem Java™-Keystore abzurufen.

Nächste Schritte

Falls Sie die zu verwendenden Verschlüsselungsmethoden noch nicht angegeben haben, verwenden Sie die WSS-API, oder konfigurieren Sie die Richtliniensätze mit der Administrationskonsole, um die Algorithmusmethoden für die Datenverschlüsselung und die Datenchiffrierung auszuwählen.


Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_confwssencryption
Dateiname:twbs_confwssencryption.html