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.

Tabelle 1. Signaturprüfabschnitte. Verwenden Sie die Signaturprüfabschnitte, um Nachrichten zu sichern.
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:
  • ADDRESSING_HEADERS
  • BODY
  • TIMESTAMP
Die WS-Addressing-Header werden nicht verschlüsselt, können aber signiert werden.
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.

Tabelle 2. Standardverhalten für Signaturprüfung. Verschiedene Kenndaten der Signaturprüfung werden standardmäßig konfiguriert.
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:
  • WSSVerification.RSA_SHA1: http://www.w3.org/2000/09/xmldsig#rsa-sha1
  • WSSVerification.HMAC_SHA1: http://www.w3.org/2000/09/xmldsig#hmac-sha1
Die digitale Signaturmethode DSA-SHA1 (http://www.w3.org/2000/09/xmldsig#dsa-sha1) wird nicht unterstützt.
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:
  • WSSVerification.EXC_C14N: http://www.w3.org/2001/10/xml-exc-c14n#
  • WSSVerification.C14N: http://www.w3.org/2001/10/xml-c14n#
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:

  • X.509-Token
  • Abgeleitetes Schlüsseltoken
Zu den für Token erforderlichen Informationen gehören die Klasse für das Token, Informationen zum Callback-Handler und der Name des JAAS-Anmeldemoduls.

Vorgehensweise

  1. Wenn Sie die Signatur in einer SOAP-Nachricht mit der API "WSSVerification" prüfen möchten, müssen Sie zuerst sicherstellen, dass der Anwendungsserver installiert ist.
  2. Verwenden Sie die API "WSSVerification", um die in einer SOAP-Nachricht zu prüfenden Nachrichtenabschnitte und die Algorithmen festzulegen. Der WSS-API-Prozess für die Signaturprüfung 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.
    3. 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.
    4. WSSVerification aus der WSSFactory-Instanz erstellen.
    5. Zu prüfenden Abschnitt hinzufügen. Wenn die Digest- oder Umsetzungsmethode geändert wird, WSSVerifyPart erstellen und in WSSVerification festlegen.
    6. Kandidaten für die Kanonisierungsmethode festlegen, falls die Standardeinstellungen nicht angemessen sind.
    7. Kandidaten für die Signaturmethode festlegen, falls die Standardeinstellungen nicht angemessen sind.
    8. Kandidaten für das Sicherheitstoken festlegen, falls die Standardeinstellungen nicht angemessen sind.
    9. requireSignatureConfirmation() aufrufen, falls die Signaturbestätigung angewendet wird.
    10. WSSVerification zu WSSConsumingContext hinzufügen.
    11. WSSConsumingContext.process() mit dem SOAP-Nachrichtenkontext aufrufen.

Ergebnisse

Sie haben die Schritte zum Prüfen der Signatur für den Konsumentenabschnitt der Bindungen ausgeführt. Wenn eine Fehlerbedingung eintritt, wird eine Ausnahme vom Typ "WSSException" angezeigt. Bei erfolgreicher Ausführung wird WSSConsumingContext.process() aufgerufen, und Web Services Security wird auf die SOAP-Nachricht angewendet.

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.


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_confsignaturecon
Dateiname:twbs_confsignaturecon.html