Sie können die Signaturdaten für die clientseitigen Anforderungsgeneratorbindungen (Sender) konfigurieren.
Signaturdaten werden verwendet, um Abschnitte einer Nachricht, wie z. B.
den SOAP-Hauptteil, die Zeitmarkeninformationen oder das Benutzernamenstoken, zu signieren und zu validieren.
Wenn Sie die Anforderungssignatur im Client konfigurieren möchten, müssen Sie während der Konfiguration des Clients angeben, welche
Nachrichtenabschnitte signiert werden sollen.
Vorbereitende Schritte
WebSphere
Application Server verwendet die digitale XML-Signatur mit vorhandenen Algorithmen, wie z. B. RSA, HMAC und SHA1. Die XML-Signatur definiert viele Methoden zur Beschreibung von
Schlüsselinformationen und ermöglicht die Definition einer neuen Methode. Machen Sie sich vor der Ausführung
dieser Schritte mit der digitalen XML-Signatur
für die Signatur und Überprüfung digitaler Signaturen für digitalen Inhalt vertraut.
Informationen zu diesem Vorgang
Durch die Einbindung von XML-Signaturen in
SOAP-Nachrichten werden folgende Punkte realisiert:Nachrichtenintegrität und Nachrichtenvertraulichkeit.
Integrität
bezieht sich auf die digitale Signatur, wohingegen sich Vertraulichkeit auf die Verschlüsselung bezieht. Integrität
verringert das Risiko der Datenmanipulation, während die Daten im Internet übertragen werden. WebSphere
Application Server verwendet die Signaturdaten für den Standardgenerator, um Nachrichtenabschnitte wie den Hauptteil (Body) der
Nachricht, Zeitmarke und das Benutzernamenstoken zu signieren.
Für die Signaturdaten müssen Sie Folgendes angeben:
- zu signierende Abschnitte der Nachricht,
- Schlüsseldaten, die von den Schlüsseldaten für die Signierschlüssel referenziert werden,
- Signaturalgorithmen.
WebSphere Application Server stellt Standardwerte für Bindungen bereit.
Diese Standardwerte müssen jedoch
vom Systemadministrator für die Produktionsumgebung geändert werden.
Die API
WSSSignature konfiguriert die folgenden Abschnitte als Signaturabschnitt:
Tabelle 1. Vorkonfigurierte Signaturabschnitte. Sie können die Signaturdaten verwenden, um Abschnitte einer Nachricht zu verwenden. Abschnitt |
Beschreibung |
Sicherheitstokenobjekt |
Dieses Objekt authentifiziert den Client. Wenn diese Option angegeben ist, wird die Nachricht signiert.
Wenn die Authentifizierungsmethode
durch Anmeldekonfiguration ausgewählt ist, können Sie die Nachricht mit einem Sicherheitstoken
digital signieren. |
WSSTimestamp-Objekt |
Dieses Objekt fügt einer Nachricht eine Zeitmarke hinzu. Die Zeitmarke bestimmt, ob die Nachricht basierend auf der Sende- und Empfangszeit gültig ist. |
WSSSignature-Abschnittsobjekt |
Dieses Objekt fügt einer Nachricht die Signaturabschnitte hinzu. |
SOAP-Header und QName als Ziel |
Dieser Signaturabschnitt fügt den mit dem QName angegebenen Header als Prüfabschnitt hinzu. |
Die WSS-APIs lassen die Verwendung von Schlüsselwörtern und XPath-Ausdrücken für die Angabe der
zu signierenden Nachrichtenabschnitte zu.
WebSphere Application Server
unterstützt die Verwendung der folgenden Schlüsselwörter:
Tabelle 2. Unterstützte Schlüsselwörter für Signatur. Die Schlüsseldaten werden verwendet, um anzugeben, welche Abschnitte einer Nachricht signiert werden sollen. Schlüsselwort |
Referenzen |
ADDRESSING_HEADERS |
Die WS-Addressing-Header (Web Services Addressing). |
BODY |
Der SOAP-Nachrichtenhauptteil. Der Teil der Nachricht, der die Benutzerdaten enthält. |
TIMESTAMP |
Die Informationen zur Erstellung und zum Verfall der Zeitmarke. |
Die APIs von Web Services Security (WSS-APIs) werden verwendet, um die Signaturdaten für den
Anforderungsgeneratorabschnitt (Clientseite) der Bindungsdatei zu konfigurieren.
Zum Konfigurieren der Signaturdaten auf der Clientseite können Sie die
WSS-APIs verwenden oder in der Administrationskonsole Richtliniensätze für die Signatur konfigurieren.
Wenn Sie die Konfiguration mit den WSS-APIs durchführen, führen die APIs WSSSignature und WSSSignPart
beim Konfigurieren des Clients für die Anforderungsgeneratorsignatur die folgenden Schritte aus, um die Nachrichtenabschnitte anzugeben, die digital signiert werden sollen:
Vorgehensweise
- Die API WSSSignature fügt die erforderlichen Abschnitte der SOAP-Nachricht hinzu, die
digital signiert werden sollen. Zur Angabe der erforderlichen Verschlüsselungsabschnitte kann ein Schlüsselwort oder ein XPath-Ausdruck verwendet werden.
- Die API WSSSignature definiert den Signaturmethodenalgorithmus. Die Standardmethode ist RSA_SHA1. WebSphere Application Server unterstützt die folgenden vorkonfigurierten Algorithmen:
WebSphere Application
Server bietet keine Unterstützung für den folgenden Algorithmus für DSA-SHA1: http://www.w3.org/2000/09/xmldsig#dsa-sha1.
Der DSA-SHA1-Algorithmus kann nicht verwendet werden,
wenn eine Kompatibilität mit Basic Security Profile (BSP) erforderlich ist.
Jedes Element "ds:SignatureMethod/@Algorithm" in einer Signatur basiert
auf einem symmetrischen Schlüssel und muss den Wert "RSA-SHA1" oder "HMAC-SHA1" haben.
Der Algorithmus, der für die Anforderungsgeneratorkonfiguration angegeben wird, muss mit dem
Algorithmus übereinstimmen, der für die Anforderungskonsumentenkonfiguration angegeben ist.
- Die API WSSSignature definiert die Kanonisierungsmethode. Die Standardsignaturmethode
ist EXC_C14N. WebSphere Application Server unterstützt die folgenden vorkonfigurierten Algorithmen:
- URI des exklusiven Kanonisierungsalgorithmus EXC_C14N: http://www.w3.org/2001/10/xml-exc-c14n#
- URI des inklusiven Kanonisierungsalgorithmus C14N: http://www.w3.org/2001/10/xml-c14n#
Der Kanonisierungsalgorithmus, den Sie für den Generator auswählen, muss mit dem Algorithmus für den Konsumenten übereinstimmen.
- Die API WSSSignature fügt ein Sicherheitstoken hinzu. Die API fügt
Informationen zum Sicherheitstoken hinzu, das für die Signatur verwendet werden soll, z. B.
- die Klasse für das Sicherheitstoken,
- den Callback-Handler,
- den Namen der JAAS-Anmeldekonfiguration.
- Die API WSSSignature definiert den Typ des Sicherheitstokens und den Typ der Tokenreferenz. WebSphere Application Server unterstützt
die folgenden vorkonfigurierten Tokenreferenzen:
- SecurityToken.REF_STR
Stellt die Sicherheitstokenreferenz als Tokenreferenztyp dar.
- SecurityToken.REF_KEYID
Stellt die Schlüsselkennungsreferenz als Tokenreferenztyp dar.
- SecurityToken.REF_EMBEDDED
Stellt die eingebettete Referenz als Tokenreferenztyp dar.
- SecurityToken.REF_THUMBPRINT
Stellt die Fingerabdrucksreferenz als Tokenreferenztyp dar.
- Wenn "SecurityToken.REF_KEYID" als Tokenreferenztyp definiert ist,
definiert die API WSSSignature den Signaturtyp für die Schlüsseldaten und konfiguriert
die Schlüsseldaten, die von den Schlüsseldatenreferenzen referenziert werden. WebSphere Application
Server unterstützt Folgendes:
- Angabe, dass das Element "KeyInfo" nicht signiert wird.
- Angabe, dass das vollständige Element <KeyInfo> signiert wird.
- Angabe, dass die untergeordneten Elemente <Keyinfochildelements> des Elements <KeyInfo>
signiert werden.
Wenn Sie keinen der vorherigen Signaturtypen angeben, gibt WebSphere Application an, dass standardmäßig
das vollständige
Element <KeyInfo> signiert wird.
Wenn Sie "Keyinfo" oder "Keyinfochildelements" auswählen und in einem weiteren Schritt als Umsetzungsalgorithmus http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#STR-Transform
auswählen, signiert WebSphere Application Server das referenzierte Token.
Der Signaturtyp für Schlüsseldaten für den Generator muss mit dem Signaturtyp für den Konsumenten übereinstimmen.
- Die API WSSSignature gibt an, ob eine Signaturbestätigung erforderlich ist. Die OASIS-Spezifikation "Web Services Security (WS-Security) Version
1.1" definiert die Verwendung der Signaturbestätigung. Wenn Sie WS-Security Version 1.0 verwenden, ist diese Funktion
nicht verfügbar.
Der Wert für die Signaturbestätigung wird gespeichert, um damit die Signaturbestätigung zu prüfen, wenn die Empfangsnachricht zurückgegeben wird.
Diese Methode wird aufgerufen, wenn erwartet wird, dass in der Antwortnachricht eine Signaturbestätigung
an die SOAP-Nachricht angefügt wird.
- Die API WSSSignPart gibt die Abschnittsreferenz an. Die Abschnittsreferenzen geben an, welche Abschnitte der Nachricht digital signiert werden.
Diese Referenz verweist auf den Nachrichtenabschnitt, der digital signiert wird.
Das Attribut "part" verweist auf den Namen des Elements <Integrity>, wenn das Element
<PartReference> für die Signatur angegeben ist.
Sie können mehrere <PartReference>-Elemente im Element <SigningInfo>
angeben. Das Element <PartReference> hat zwei untergeordnete Elemente, wenn es für die Signaturprüfung
angegeben wird: <DigestTransform> und <Transform>.
- Die Anwendungsprogrammierschnittstelle "WSSSignPart" gibt den Digest-Methodenalgorithmus an. Der im Element
<DigestMethod> angegebene Algorithmus für die
Digest-Methode wird im Element <SigningInfo> verwendet.
WebSphere Application Server unterstützt
die folgenden vorkonfigurierten Digest-Algorithmen:
- http://www.w3.org/2000/09/xmldsig#sha1
- http://www.w3.org/2001/04/xmlenc#sha256
- http://www.w3.org/2001/04/xmlenc#sha512
- Die API WSSSignPart gibt den Umsetzungsalgorithmus an. Der im Element
<Transform> angegebene Umsetzungsalgorithmus wird für die Signatur verwendet. WebSphere Application
Server unterstützt die folgenden vorkonfigurierten Umsetzungsalgorithmen:
Der Umsetzungsalgorithmus, den Sie für den Generator angeben, muss mit dem Umsetzungsalgorithmus für den Konsumenten übereinstimmen.
Wichtig: Wenn die beiden nachfolgend genannten Bedingungen zutreffen, signiert
WebSphere Application Server das referenzierte Token:
- Sie haben die Option "Keyinfo" bzw. "Keyinfochildelements" ausgewählt.
- Sie haben folgenden Umsetzungsalgorithmus ausgewählt: http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#STR-Transform.
- Wenn Sie die Signaturdaten des Clients und des Servers
richtig konfigurieren, bei der Ausführung des Clients jedoch den Fehler
Der SOAP-Body ist nicht signiert empfangen, müssen Sie möglicherweise
den Actor konfigurieren. Konfigurieren Sie über die Administrationskonsole
Richtliniensätze, um dieselben Actor-Zeichenfolgen für den Web-Service
auf dem Server zu konfigurieren, der die Anforderung verarbeitet und die Antwort zurücksendet.
Die Actor-Informationen auf dem Client und dem Server müssen auf exakt dieselbe
Zeichenfolge verweisen. Wenn die Actor-Felder auf Client und Server übereinstimmen, wird
die Anforderung bzw. Antwort verarbeitet und nicht an einen Downstream-Server
weitergeleitet.
Die Actor-Informationen können sich unterscheiden, wenn Sie Web-Services verwenden, die als Gateway zu anderen Web-Services fungieren.
In allen
anderen Fällen müssen Sie jedoch sicherstellen, dass die Actor-Informationen auf dem Client und
auf dem Server übereinstimmen. Wenn Web-Services als Gateway fungieren und für sie nicht
derselbe Actor
konfiguriert ist wie für die Anforderung, die durch das Gateway weitergeleitet wird,
verarbeiten Web-Services die Nachricht von einem Client nicht. Stattdessen senden
diese Web-Services die Anforderung an einen Downstream-Server. Der Downstream-Prozess,
der die richtige Actor-Zeichenfolge enthält, verarbeitet die Anforderung.
Für die Antwort ergibt sich dieselbe Situation. Daher müssen Sie unbedingt überprüfen, ob
die Actor-Felder des Clients und des Servers synchronisiert sind.
Ergebnisse
Nachdem die APIs WSSSignature und WSSSignPart diese Schritte ausgeführt haben, sind die Signaturdaten für die Generatorabschnitte
der Bindungsdateien konfiguriert.
Beispiel
Das folgende Beispiel enthält WSS-API-Beispielcode, der veranschaulicht, wie
die Signatur konfiguriert, der Callback-Handler generiert und der X.509-Tokentyp als Sicherheitstoken festgelegt wird:
WSSFactory factory = WSSFactory.getInstance();
// Generierungskontext instanziieren
WSSGenerationContext gencont = factory.newWSSGenerationContext();
// Callback-Handler generieren und X.509-Token angeben
X509GenerateCallbackHandler callbackhandler = generateCallbackHandler();
SecurityToken token = factory.newSecurityToken(X509Token.class,
callbackHandler);
// Signaturdaten festlegen
WSSSignature sig = factory.newWSSSignature(token);
// Header über QName hinzufügen
sig.addSignHeader(new QName("http://www.w3.org/2005/08/addressing", "To"));
sig.addSignHeader(new QName("http://www.w3.org/2005/08/addressing", "MessageID"));
sig.addSignHeader(new QName("http://www.w3.org/2005/08/addressing", "Action"));
// Signatur anwenden
gencont.add(sig);
// Nachricht sichern
gencont.process(msgctx);
Nächste Schritte
Sie müssen ähnliche Signaturdaten für die clientseitigen Anforderungskonsumentenbindungen (Empfänger) angeben. Führen Sie dazu die folgenden
Prüftasks aus:
- Signatur prüfen
- Signaturalgorithmusmethoden auswählen
- Signierte Abschnitte bei Bedarf ändern oder hinzufügen
Wenn die Signaturprüfung bereits konfiguriert ist, konfigurieren Sie die Verschlüsselungs- und Entschlüsselungsdaten, oder konfigurieren Sie die
Konsumenten- und Generatortoken.