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".
Die API "WSSVerifyPart" wird verwendet, um die Umsetzung- oder Digest-Methoden für die Prüfung anzugeben. Verwenden Sie die API "WSSVerifyPart", oder konfigurieren Sie über die Administrationskonsole Richtliniensätze.

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:

Tabelle 1. Informationen zu den zu prüfenden Abschnitten. Verwenden Sie die zu prüfenden Abschnitte, um Nachrichten mit Signaturdaten zu sichern.
Informationen zu den zu prüfenden Abschnitten Beschreibung
keyword Definiert die zu prüfenden Abschnitte mit den folgenden Schlüsselwörtern:
  • BODY
  • ADDRESSING_HEADERS
  • TIMESTAMP

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.

Tabelle 2. Standardverhalten für zu prüfende Abschnitte. Verschiedene Kenndaten von zu prüfenden Abschnitten werden standardmäßig konfiguriert.
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:

  • WSSVerification.BODY
  • WSSVerification.ADDRESSING_HEADERS
  • WSSVerification.TIMESTAMP
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:

  • WSSVerifyPart.TRANSFORM_EXC_C14N (Standardwert): http://www.w3.org/2001/10/xml-exc-c14n#
  • WSSVerifyPart.TRANSFORM_XPATH2_FILTER: http://www.w3.org/2002/06/xmldsig-filter2

    Verwenden Sie diese Umsetzungsmethode, um die Konformität mit Basic Security Profile (BSP) sicherzustellen.

  • WSSVerifyPart.TRANSFORM_STRT10: http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#STR-Transform
  • WSSVerifyPart.TRANSFORM_ENVELOPED_SIGNATURE: http://www.w3.org/2000/09/xmldsig#enveloped-signature
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:
  • WSSVerifyPart.SHA1: http://www.w3.org/2000/09/xmldsig#sha1
  • WSSVerifyPart.SHA256: http://www.w3.org/2001/04/xmlenc#sha256
  • WSSVerifyPart.SHA512: http://www.w3.org/2001/04/xmlenc#sha512

Vorgehensweise

  1. Wenn Sie signierte Abschnitte mit der API "WSSVerifyPart" prüfen möchten, müssen Sie zuerst sicherstellen, dass der Anwendungsserver installiert ist.
  2. Verwenden Sie die Anwendungsprogrammierschnittstelle von Web Services Security, um die Prüfung in einer SOAP-Nachricht zu prüfen. Der WSS-API-Prozess zur Prüfung der Signatur teilt sich in die folgenden Schritte auf:
    1. Mit WSSFactory.getInstance() die Instanz der WSS-API-Implementierung abrufen.
    2. WSSConsumingContext-Instanz aus der WSSFactory-Instanz erstellen. Damit wird sichergestellt, dass WSSConsumingContext in der Implementierungsklasse des JAX-WS-Providers aufgerufen wird. Aufgrund der Spezifik des Programmiermodells JAX-WS muss ein JAX-WS-Provider implementiert werden und WSSConsumingContext aufrufen, um die Signatur der SOAP-Nachricht zu prüfen.
    3. Für die Prüfung zu verwendenden CallbackHandler erstellen.
    4. WSSVerification-Objekt aus der WSSFactory-Instanz erstellen.
    5. WSSVerifyPart aus der WSSFactory-Instanz erstellen.
    6. Zu prüfende Abschnitte definieren, falls die Standardeinstellungen nicht angemessen sind.
    7. Kandidaten für die Digest-Methode festlegen, falls die Standardeinstellungen nicht angemessen sind.
    8. Kandidaten für die Umsetzungsmethode festlegen, falls die Standardeinstellungen nicht angemessen sind.
    9. WSSVerifyPart zu WSSVerification hinzufügen.
    10. WSSVerification zu WSSConsumingContext hinzufügen.
    11. WSSConsumingContext.process() mit dem SOAPMessageContext aufrufen.

Ergebnisse

Sie haben die Schritte zur Prüfung der signierten Abschnitte auf Konsumentenseite ausgeführt. Wenn bei der Prüfung der Signaturdaten eine Fehlerbedingung eintritt, wird eine Ausnahme vom Typ "WSSException" angezeigt. Bei erfolgreicher Prüfung wird WSSConsumingContext.process() aufgerufen und Web Services Security für die SOAP-Nachricht geprüft.

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);

Nächste Schritte

Sie haben die zu prüfenden signierten Abschnitte konfiguriert.

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_confsignaturepartcon
Dateiname:twbs_confsignaturepartcon.html