Signatur mit der Anwendungsprogrammierschnittstelle "WSSVerification "prüfen
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. Verwenden Sie zum Überprüfen der Signaturdaten für die Konsumentenbindungsabschnitte für die clientseitige Anforderung die API WSSVerification. Außerdem müssen Sie angeben, welche Algorithmusmethoden und welche Signaturabschnitte der SOAP-Nachricht geprüft werden sollen. Die API "WSSVerification" gehört zum Paket "com.ibm.websphere.wssecurity.wssapi.verification".
Vorbereitende Schritte
Verwenden Sie die WSS-APIs, oder konfigurieren Sie die Richtliniensätze in der Administrationskonsole, um die Signaturdaten zu prüfen. Wenn Sie SOAP-Nachrichten sichern möchten, müssen Sie die folgenden Signaturtasks ausführen:
- Signaturdaten konfigurieren,
- Algorithmusmethoden für die Signatur und Signaturprüfung auswählen,
- Signaturdaten prüfen.
Informationen zu diesem Vorgang
WebSphere Application Server verwendet die Signaturdaten für den Standardgenerator, um Abschnitte der Nachricht zu signieren, und verwendet die digitale XML-Signatur mit vorhandenen Algorithmen wie RSA-SHA1 und HMAC-SHA1.
Die XML-Signatur definiert viele Methoden zur Beschreibung von Schlüsselinformationen und ermöglicht die Definition einer neuen Methode. XML-Kanonisierung (C14N) ist häufig erforderlich, wenn Sie mit XML-Signaturen arbeiten. Informationen können auf vielerlei Weise in serialisierten XML-Dokumenten verwendet werden. Der C14N-Prozess wird zum Kanonisieren von XML-Daten verwendet. Wählen Sie einen entsprechenden C14N-Algorithmus aus, weil die Daten, die kanonisiert werden, von diesem Algorithmus abhängig sind.
Die folgende Tabelle enthält die Bindungsinformationen, die erforderlich bzw. optional sind, wenn die Integritätsbedingung für die Sicherheit der digitalen Signatur definiert ist.
Prüfabschnitte | Beschreibung |
---|---|
keywords | Fügt die erforderlichen Signaturabschnitte als Prüfziele mit Schlüsselwörtern hinzu. Für Anforderungen
auf der Generatorseite können verschiedene Nachrichtenabschnitte im Nachrichtenschutz angegeben werden. Verwenden
Sie die folgenden Schlüsselwörter für die erforderlichen Signaturprüfabschnitte:
|
xpath | Fügt die Prüfabschnitte mit einem XPath-Ausdruck hinzu. |
part | Fügt das WSSVerifyPart-Objekt als Prüfabschnitt hinzu. |
header | Fügt den Header nach QName als Prüfabschnitt hinzu. |
Bei den Signaturprüfdaten sind bestimmte Standardverhalten zu beobachten. Die API "WSSVerification" lässt sich am einfachsten über den Einsatz des Standardverhaltens verwenden.
Die Standardwerte für die Digest-Methode, die Umsetzungsmethode, das Sicherheitstoken und die erforderlichen Prüfabschnitte werden von der WSS-API definiert.
Entscheidungen bzgl. der Signaturprüfung | Standardverhalten |
---|---|
Zu verwendende Signaturmethode (Algorithmus) | Legt die Signaturalgorithmusmethode fest. Sie können
Datenverschlüsselung für die Signatur und die Kanonisierung angeben. Die Standardsignaturmethode ist RSA SHA1. WebSphere
Application Server unterstützt die folgenden vorkonfigurierten Signaturmethoden:
|
Zu verwendende Kanonisierungsmethode (Algorithmus) | Legt die Kanonisierungsalgorithmusmethode fest. Sie können
Datenverschlüsselung für die Signatur und die Kanonisierung angeben. Die Standardsignaturmethode
ist EXC_C14N. WebSphere Application Server
unterstützt die folgenden vorkonfigurierten Kanonisierungsmethoden:
|
Signaturbestätigung erforderlich? | Wenn die API "WSSSignature" festlegt, dass eine Signaturbestätigung erforderlich ist,
prüft die API "WSSVerification" den Wert für die Signaturbestätigung in der Antwortnachricht,
der beim Empfang ein Signaturbestätigungswert zugeordnet ist. Die Signaturbestätigung ist in der OASIS-Spezifikation
Web Services Security Version 1.1 definiert.
Der Standardwert für Signaturbestätigung ist "false". |
Anzugebendes Sicherheitstoken (securityToken) | Fügt das securityToken-Objekt als Signaturabschnitt hinzu. WebSphere Application Server legt die für die Prüfung zu verwendenden Tokeninformationen fest. WebSphere Application Server unterstützt die folgenden vorkonfigurierten Token für die Signatur:
|
Vorgehensweise
Ergebnisse
Beispiel
Im folgenden Beispielcode werden Methoden verwendet, die in der API WSSVerification definiert sind:
// Nachrichtenkontext abrufen
Object msgcontext = getMessageContext();
// WSSFactory-Instanz erstellen (Schritt a)
WSSFactory factory = WSSFactory.getInstance();
// WSSConsumingContext-Instanz generieren (Schritt b)
WSSConsumingContext concont = factory.newWSSConsumingContext();
// Zertifikatsliste generieren
String certpath = "c:/WebSphere/AppServer/etc/ws-security/samples/intca2.cer";
// Position der X509-Zertifikatsdatei
X509Certificate x509cert = null;
try {
InputStream is = new FileInputStream(certpath);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
x509cert = (X509Certificate)cf.generateCertificate(is);
} catch(FileNotFoundException e1){
throw new WSSException(e1);
} catch (CertificateException e2) {
throw new WSSException(e2);
}
Set<Object> eeCerts = new HashSet<Object>();
eeCerts.add(x509cert);
// Zertifikatsspeicher erstellen.
java.util.List<CertStore> certList = new java.util.ArrayList<CertStore>();
CollectionCertStoreParameters certparam = new CollectionCertStoreParameters(eeCerts);
CertStore cert = null;
try {
cert = CertStore.getInstance("Collection", certparam, "IBMCertPath");
} catch (NoSuchProviderException e1) {
throw new WSSException(e1);
} catch (InvalidAlgorithmParameterException e2) {
throw new WSSException(e2);
} catch (NoSuchAlgorithmException e3) {
throw new WSSException (e3);
}
if(certList != null ){
certList.add(cert);
}
// Callback-Handler generieren
X509ConsumeCallbackHandler callbackHandler = new X509ConsumeCallbackHandler(
"dsig-receiver.ks",
"jks",
"server".toCharArray(),
certList,
java.security.Security.getProvider("IBMCertPath")
);
// WSSVerification-Instanz generieren (Schritt d)
WSSVerification ver = factory.newWSSVerification(X509Token.class, callbackHandler);
// Zu prüfenden Abschnitt festlegen (Schritt e)
// STANDARD: WSSVerification.BODY, WSSSignature.ADDRESSING_HEADERS
// und WSSSignature.TIMESTAMP.
// Mit dem QName angegebenen zu prüfenden Abschnitt im SOAP-Header festlegen (Schritt e)
ver.addRequiredVerifyHeader(new QName("http://www.w3.org/2005/08/addressing", "MessageID"));
// Mit dem Schlüsselwort anzugebenden Abschnitt festlegen (Schritt e)
ver.addRequiredVerifyPart(WSSVerification.BODY);
// Mit WSSVerifyPart anzugebenden Abschnitt festlegen (Schritt e)
WSSVerifyPart verPart = factory.newWSSVerifyPart();
verPart.setRequiredVerifyPart(WSSVerification.BODY);
verPart.addAllowedDigestMethod(WSSVerifyPart.SHA256);
ver.addRequiredVerifyPart(verPart);
// 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']");
ver.addRequiredVerifyPartByXPath(sb.toString());
// Kandidaten für die Kanonisierungsmethode für die Prüfung festlegen (Schritt f)
// STANDARD: WSSVerification.EXC_C14N
ver.addAllowedCanonicalizationMethod(WSSVerification.C14N);
ver.addAllowedCanonicalizationMethod(WSSVerification.EXC_C14N);
// Kandidaten für die Signaturmethode für die Prüfung festlegen (Schritt g)
// STANDARD: WSSVerification.RSA_SHA1
ver.addAllowedSignatureMethod(WSSVerification.HMAC_SHA1);
// Kandidaten für das für die Prüfung zu verwendende Sicherheitstoken festlegen (Schritt h)
X509ConsumeCallbackHandler callbackHandler2 = getCallbackHandler2();
ver.addToken(X509Token.class, callbackHandler2);
// Flag für Anforderung der Signaturbestätigung festlegen (Schritt i)
ver.requireSignatureConfirmation();
// WSSVerification zu WSSConsumingContext hinzufügen (Schritt j)
concont.add(ver);
// WS-Security-Header validieren (Schritt k)
concont.process(msgcontext);
Nächste Schritte
Nachdem Sie die Signatur geprüft und die Algorithmusmethoden für die SOAP-Nachricht festgelegt haben, können Sie die Digest- oder Umsetzungsmethode festlegen. Wenn Sie diese Methoden festlegen möchten, verwenden Sie die API "WSSVerifyPart", oder konfigurieren Sie in der Administrationskonsole Richtliniensätze.