Signierte Abschnitte mit der API "WSSVerifyPart" überprüfen
Wenn Sie SOAP-Nachrichten auf Konsumentenseite schützen möchten, verwenden Sie die Anwendungsprogrammierschnittstellen (API, Application Programming Interface) von Web Services Security (WSS API), um die Informationen zu den zu überprüfenden Abschnitten für die Konsumentenbindung beim Antwortkonsumenten (Clientseite) zu konfigurieren. Sie können angeben, welche Algorithmusmethoden und welche Abschnitte der SOAP-Nachricht geprüft werden sollen. Verwenden Sie die API "WSSVerifyPart", um die Digest-Methode oder Umsetzungsmethode zu ändern. Die API "WSSVerifyPart" gehört zum Paket "com.ibm.websphere.wssecurity.wssapi.verification".
Vorbereitende Schritte
Sie müssen eine der folgenden Tasks ausführen, wenn Sie SOAP-Nachrichten mithilfe von Signaturprüfdaten sichern möchten:
- Konfigurieren Sie die Signaturprüfdaten mit der API "WSSVerification".
- Konfigurieren Sie bei Bedarf die zu prüfenden Abschnitte mit der API "WSSVerifyPart".
Informationen zu diesem Vorgang
WebSphere Application Server verwendet die Signaturdaten für den Standardkonsumenten, um die signierten Abschnitte der Nachricht zu prüfen. Die API "WSSVerifyPart" wird nur für den Antwortkonsumenten (Anforderer) unterstützt.
In der folgenden Tabelle sind die Abschnitte aufgelistet, die geprüft werden müssen, wenn die Integritätsbedingung für die Sicherheit der digitalen Signatur definiert ist:
Informationen zu den zu prüfenden Abschnitten | Beschreibung |
---|---|
keyword | Definiert die zu prüfenden Abschnitte mit den folgenden Schlüsselwörtern:
Die WS-Addressing-Header werden nicht entschlüsselt, können aber signiert und geprüft werden. |
xpath | Definiert die zu prüfenden Abschnitte mit einem XPath-Ausdruck. |
header | Definiert den Header nach QName als erforderlichen zu prüfenden Abschnitt. |
Bei der Signaturprüfung sind bestimmte Standardverhalten zu beobachten. Die API "WSSVerification" lässt sich am einfachsten über den Einsatz des Standardverhaltens verwenden (siehe Beispielcode). Die Standardwerte für den Signaturalgorithmus und den Kanonisierungsalgorithmus sowie die zu prüfenden Abschnitte werden von der WSS-API definiert.
Entscheidungen bzgl. zu prüfender Abschnitte | Standardverhalten |
---|---|
Anzugebende Schlüsselwörter | Die verschiedenen SOAP-Nachrichtenabschnitte, die signiert und für den Nachrichtenschutz verwendet werden sollen. WebSphere Application Server unterstützt die folgenden Schlüsselwörter:
|
Zu verwendende Umsetzungsmethode (Algorithmus) | Fügt die Umsetzungsmethode hinzu. Der Umsetzungsalgorithmus wird im Element
<Transform> angegeben und gibt den Umsetzungsalgorithmus für die Signatur an.
Die Standardumsetzungsmethode ist TRANSFORM_EXC_C14N. WebSphere Application Server unterstützt die folgenden vorkonfigurierten Umsetzungsalgorithmen:
|
Zu verwendende Digest-Methode (Algorithmus) | Definiert die Methode für den Digest-Algorithmus. Der im Element
<DigestMethod> angegebene Algorithmus für die
Digest-Methode wird im Element <SigningInfo> verwendet. Standardmäßig wird die Digest-Methode SHA1 verwendet. WebSphere Application Server
unterstützt die folgenden Algorithmen für die Digest-Methode:
|
Vorgehensweise
Ergebnisse
Beispiel
Im folgenden Beispiel wird der Code gezeigt, den der WSSVerification-API-Prozess verwendet, um die Signaturdaten in einer SOAP-Nachricht zu prüfen:
// 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 (Schritt c)
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);
// Mit WSSVerifyPart anzugebenden Abschnitt festlegen (Schritt e)
WSSVerifyPart verPart = factory.newWSSVerifyPart();
// Mit dem Schlüsselwort anzugebenden Abschnitt festlegen (Schritt f)
verPart.setRequiredVerifyPart(WSSVerification.BODY);
// Kandidaten für die Digest-Methode für die Prüfung festlegen (Schritt g)
// STANDARD: WSSVerifyPart.SHA1
verPart.addAllowedDigestMethod(WSSVerifyPart.SHA256);
// Kandidaten für die Umsetzungsmethode für die Prüfung festlegen (Schritt h)
// STANDARD: WSSVerifypart.TRANSFORM_EXC_C14N : String
verPart.addAllowedTransform(WSSVerifyPart.TRANSFORM_STRT10);
// SWSSVerifyPart auf WSSVerification setzen (Schritt i)
ver.addRequiredVerifyPart(verPart);
// WSSVerification zu WSSConsumingContext hinzufügen (Schritt j)
concont.add(ver);
// WS-Security-Header validieren (Schritt k)
concont.process(msgcontext);