Beispiel: Beispielkonfiguration für Web Services Security für eine Anwendung der Version 5.x
Wenn Sie eine Anwendung der Version 5.x mit Web Services Security sichern möchten, müssen Sie die Sicherheitseinschränkungen in den erweiterten IBM® Implementierungsdeskriptoren und in den erweiterten IBM Bindungen definieren. Es werden Beispiel-Keystore-Dateien und Standardbindungsinformationen für eine Beispielkonfiguration bereitgestellt, um die Funktionen der erweiterten IBM Implementierungsdeskriptoren und Bindungen zu veranschaulichen.
- ${USER_INSTALL_ROOT}/etc/ws-security/samples/dsig-sender.ks
- Das Keystore-Kennwort ist client.
- Anerkanntes Zertifikat mit Aliasname soapca
- Persönliches Zertifikat mit Aliasname soaprequester und Schlüsselkennwort client, das von der zwischengeschalteten Zertifizierungsstelle Int CA2 ausgestellt wurde, die wiederum von soapca ausgestellt wurde.
- ${USER_INSTALL_ROOT}/etc/ws-security/samples/dsig-receiver.ks
- Das Keystore-Kennwort ist server.
- Anerkanntes Zertifikat mit Aliasname soapca
- Persönliches Zertifikat mit Aliasname soapprovider und Schlüsselkennwort server, das von der zwischengeschalteten Zertifizierungsstelle Int CA2 ausgestellt wurde, die wiederum von soapca ausgestellt wurde.
- ${USER_INSTALL_ROOT}/etc/ws-security/samples/enc-sender.jceks
- Das Keystore-Kennwort ist storepass.
- Geheimer Schlüssel ist CN=Group1, Aliasname ist Group1 und Schlüsselkennwort ist keypass.
- Geheimer Schlüssel ist CN=Bob, O=IBM, C=US, Aliasname ist bob und Schlüsselkennwort ist keypass.
- Privater Schlüssel ist CN=Alice, O=IBM, C=US, Aliasname ist alice und Schlüsselkennwort ist keypass.
- ${USER_INSTALL_ROOT}/etc/ws-security/samples/enc-receiver.jceks
- Das Keystore-Kennwort ist storepass.
- Geheimer Schlüssel ist CN=Group1, Aliasname ist Group1 und Schlüsselkennwort ist keypass.
- Privater Schlüssel ist CN=Bob, O=IBM, C=US, Aliasname ist bob und Schlüsselkennwort ist keypass.
- Öffentlicher Schlüssel ist CN=Alice, O=IBM, C=US, Aliasname ist alice und Schlüsselkennwort ist keypass.
- ${USER_INSTALL_ROOT}/etc/ws-security/samples/intca2.cer
- Die Zertifizierungsstelle für Zwischenzertifikate ist Int CA2.
Standardbindung (Zellen- und Serverebene)
- Trust-Anchor
- Damit wird die Vertrauenswürdigkeit (Trust) des Ausstellerzertifikats validiert.
- SampleClientTrustAnchor wird vom Antwortempfänger für die Validierung des Unterzeichnerzertifikats verwendet.
- SampleServerTrustAnchor wird vom Anforderungsempfänger für die Validierung des Unterzeichnerzertifikats verwendet.
- Zertifikatssammelspeicher
- Damit wird der Zertifikatpfad validiert.
- SampleCollectionCertStore wird vom Antwortempfänger und vom Anforderungsempfänger verwendet, um den Pfad des Unterzeichnerzertifikats zu validieren.
- Schlüsselsuchfunktionen (Key-Locator)
- Damit wird der Schlüssel für Signatur, Verschlüsselung und Entschlüsselung gesucht.
- SampleClientSignerKey wird vom Anforderungssender verwendet, um die SOAP-Nachricht zu signieren. Der Name des Signaturschlüssels ist clientsignerkey, und er kann in den Signaturdaten referenziert werden.
- SampleServerSignerKey wird vom Anforderungssender verwendet, um die SOAP-Nachricht zu signieren. Der Name des Signaturschlüssels ist serversignerkey, und er kann in den Signaturdaten referenziert werden.
- SampleSenderEncryptionKeyLocator wird vom Absender verwendet, um die SOAP-Nachricht zu signieren. Er ist so konfiguriert, dass er den Keystore ${USER_INSTALL_ROOT}/etc/ws-security/samples/enc-sender.jceks und den Keystore-Key-Locator com.ibm.wsspi.wssecurity.config.KeyStoreKeyLocator verwendet.
- SampleReceiverEncryptionKeyLocator wird vom Empfänger verwendet, um die verschlüsselte SOAP-Nachricht zu entschlüsseln. Die Implementierung ist konfiguriert, den Keystore ${USER_INSTALL_ROOT}/etc/ws-security/samples/enc-receiver.jceks und den Keystore-Key-Locator com.ibm.wsspi.wssecurity.config.KeyStoreKeyLocator zu verwenden. Außerdem ist symmetrische Verschlüsselung (DES oder TRIPLEDES) konfiguriert. Zur Verwendung der asymmetrischen Verschlüsselung (RSA) müssen Sie den privaten Schlüssel CN=Bob, O=IBM, C=US, den Aliasnamen bob und das Schlüsselkennwort keypass hinzufügen.
- SampleResponseSenderEncryptionKeyLocator wird vom Antwortabsender verwendet, um die SOAP-Nachricht zu verschlüsseln. Er ist konfiguriert, den Keystore ${USER_INSTALL_ROOT}/etc/ws-security/samples/enc-receiver.jceks und den Keystore-Key-Locator com.ibm.wsspi.wssecurity.config.WSIdKeyStoreMapKeyLocator zu verwenden. Dieser Key Locator ordnet eine authentifizierte Identität (des aktuellen Thread) für Verschlüsselung einem öffentlichen Schlüssel zu. Standardmäßig ist WebSphere Application Server so konfiguriert, dass die Identität dem öffentlichen Schlüssel alice zugeordnet wird, und Sie müssen WebSphere Application Server auf den richtigen Benutzer einstellen. Der Key-Locator SampleResponseSenderEncryptionKeyLocator kann auch einen Standardschlüssel für die Verschlüsselung festlegen. Standardmäßig ist dieser Key-Locator konfiguriert, den öffentlichen Schlüssel alice zu verwenden.
- Trusted-ID-Evaluator
- Damit wird die Vertrauensbasis geschaffen, bevor die Identität zugesichert wird.Der Trusted-ID-Evaluator SampleTrustedIDEvaluator ist konfiguriert, die Implementierung com.ibm.wsspi.wssecurity.id.TrustedIDEvaluatorImpl zu verwenden. Die Standardimplementierung com.ibm.wsspi.wssecurity.id.TrustedIDEvaluator enthält eine Liste der vertrauenswürdigen Identitäten. Die Liste ist in Form von Eigenschaften mit trustedId_* als Schlüssel und dem Wert als vertrauenswürdige ID definiert. Definieren Sie diese Informationen auf Serverebene in der Administrationskonsole wie folgt:
- Klicken Sie auf .
- Klicken Sie unter "Weitere Eigenschaften" auf .
- Anmeldezuordnung
- Damit wird das eingehende Sicherheitstoken im SOAP-Header einer SOAP-Nachricht für Web Services Security
authentifiziert.
- Für die Authentifizierung des Benutzernamenssicherheitstoken (Benutzername und Kennwort) wird die Authentifizierungsmethode BasicAuth verwendet.
- Das Authentifizierungsverfahren "signature" wird verwendet, um einem JAAS-Subjekt (Java™ Authentication and Authorization Server) in WebSphere Application Server einen definierten Namen zuzuordnen.
- Mit der Authentifizierungsmethode IDAssertion wird einem JAAS-Subjekt in WebSphere Application Server für die Zusicherung der Identität eine vertrauenswürdige ID (Trusted ID) zugeordnet.
- Die Authentifizierungsmethode Lightweight Third Party Authentication (LTPA) wird verwendet, um ein LTPA-Sicherheitstoken zu validieren.
Beispielkonfiguration
Die folgenden Beispiele veranschaulichen die Funktionen der erweiterten IBM Implementierungsdeskriptoren und Bindungen. Nicht erforderliche Informationen wurden aus Gründen der Übersichtlichkeit aus den Beispielen entfernt. Kopieren Sie diese Beispiele nicht in die Implementierungsdeskriptoren oder Bindungen Ihrer Anwendung. Diese Beispiele dienen lediglich als Referenz und sind für die empfohlene Konfiguration nicht repräsentativ.
- Mit einem Assembliertool erstellen und editieren Sie die erweiterten IBM Implementierungsdeskriptoren.
- Mit einem Assembliertool oder der Administrationskonsole erstellen und editieren Sie die Bindungsdatei.
- Signatur des SOAP-Bodys, der Zeitmarke und des Sicherheitstoken
- Verschlüsselung des Inhalts des SOAP-Bodys und des Token mit dem Benutzernamen
- Versenden des Token mit dem Benutzernamen (Daten für Basisauthentifizierung)
- Erstellung der Zeitmarke für die Anforderung
Für die Antwort werden der SOAP-Body und die Zeitmarke signiert, der Inhalt des Bodys verschlüsselt und die Aktualität der SOAP-Nachricht anhand der Zeitmarke geprüft. Anhand der Aktualität der Nachricht kann festgestellt werden, ob die Nachricht den vordefinierten Zeitvorgaben entspricht.
Der Sender und der Empfänger der Anforderung bilden ein Paar. Die gilt auch für den Sender und den Empfänger der Antwort.
Clientseitiger erweiterter IBM-Implementierungsdeskriptor
Der clientseitige erweiterte IBM-Implementierungsdeskriptor legt die folgenden Vorgaben fest:
- Signiert SOAP-Body, Zeitmarke und Sicherheitstoken.
- Verschlüsselung des Inhalts des SOAP-Bodys und des Token mit dem Benutzernamen.
- Sendet das Token für die Basisauthentifizierung (Benutzername und Kennwort).
- Generiert die Zeitmarke mit einer Verfallszeit von drei Minuten.
- Prüft, ob SOAP-Body und Zeitmarke signiert sind.
- Prüft, ob der Inhalt des SOAP-Body verschlüsselt ist.
- Prüft, ob die Zeitmarke vorhanden ist (überprüft auch die Aktualität der Nachricht).
<?xml version="1.0" encoding="UTF-8"?>
<com.ibm.etools.webservice.wscext:WsClientExtension xmi:version="2.0"
xmlns:xmi="http://www.omg.org/XMI" xmlns:com.ibm.etools.webservice.wscext=
http://www.ibm.com/websphere/appserver/schemas/5.0.2/wscext.xmi">
<serviceRefs serviceRefLink="service/myServ">
<portQnameBindings portQnameLocalNameLink="Port1">
<clientServiceConfig actorURI="myActorURI">
<securityRequestSenderServiceConfig actor="myActorURI">
<integrity>
<references part="body"/>
<references part="timestamp"/>
<references part="securitytoken"/>
</integrity>
<confidentiality>
<confidentialParts part="bodycontent"/>
<confidentialParts part="usernametoken"/>
</confidentiality>
<loginConfig authMethod="BasicAuth"/>
<addCreatedTimeStamp flag="true" expires="PT3M"/>
</securityRequestSenderServiceConfig>
<securityResponseReceiverServiceConfig>
<requiredIntegrity>
<references part="body"/>
<references part="timestamp"/>
</requiredIntegrity>
<requiredConfidentiality>
<confidentialParts part="bodycontent"/>
</requiredConfidentiality>
<addReceivedTimeStamp flag="true"/>
</securityResponseReceiverServiceConfig>
</clientServiceConfig>
</portQnameBindings>
</serviceRefs>
</com.ibm.etools.webservice.wscext:WsClientExtension>
Erweiterte IBM Clientbindungen
Beispiel 2 zeigt die erweiterte IBM Clientbindung für die Sicherheitseinschränkungen, die zuvor im Zusammenhang mit den clientseitigen erweiterten IBM Implementierungsdeskriptoren beschrieben wurden.
Der Unterzeichnerschlüssel und der Verschlüsselungs-/Entschlüsselungsschlüssel für die Nachricht kann aus der Key-Locator-Implementierung des Keystore (com.ibm.wsspi.wssecurity.config.KeyStoreKeyLocator) abgerufen werden. Der Unterzeichnerschlüssel wird zur Verschlüsselung der Antwort verwendet. In dem Beispiel wird die Java-API für Zertifizierungspfade (Java Certification Path API) verwendet, um den Zertifizierungspfad des Ausstellers der digitalen Signatur validiert. Die Daten für das Token mit dem Benutzernamen (Basisauthentifizierung) wird über die Standardeingabe (stdin) unter Verwendung einer der JAAS-Standardimplementierungen von :javax.security.auth.callback.CallbackHandler (com.ibm.wsspi.wssecurity.auth.callback.StdinPromptCallbackHandler) erfasst.
<?xml version="1.0" encoding="UTF-8"?>
<com.ibm.etools.webservice.wscbnd:ClientBinding xmi:version="2.0"
xmlns:xmi="http://www.omg.org/XMI"
xmlns:com.ibm.etools.webservice.wscbnd=
"http://www.ibm.com/websphere/appserver/schemas/5.0.2/wscbnd.xmi">
<serviceRefs serviceRefLink="service/MyServ">
<portQnameBindings portQnameLocalNameLink="Port1">
<securityRequestSenderBindingConfig>
<signingInfo>
<signatureMethod algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<signingKey name="clientsignerkey" locatorRef="SampleClientSignerKey"/>
<canonicalizationMethod algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<digestMethod algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
</signingInfo>
<keyLocators name="SampleClientSignerKey" classname=
"com.ibm.wsspi.wssecurity.config.KeyStoreKeyLocator">
<keyStore storepass="{xor}PDM2OjEr" path=
"$${USER_INSTALL_ROOT}/etc/ws-security/samples/dsig-sender.ks" type="JKS"/>
<keys alias="soaprequester" keypass="{xor}PDM2OjEr" name="clientsignerkey"/>
</keyLocators>
<encryptionInfo name="EncInfo1">
<encryptionKey name="CN=Bob, O=IBM, C=US" locatorRef=
"SampleSenderEncryptionKeyLocator"/>
<encryptionMethod algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
<keyEncryptionMethod algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
</encryptionInfo>
<keyLocators name="SampleSenderEncryptionKeyLocator" classname=
"com.ibm.wsspi.wssecurity.config.KeyStoreKeyLocator">
<keyStore storepass="{xor}LCswLTovPiws" path=
"$${USER_INSTALL_ROOT}/etc/ws-security/samples/enc-sender.jceks" type="JCEKS"/>
<keys alias="Group1" keypass="{xor}NDomLz4sLA==" name="CN=Group1"/>
</keyLocators>
<loginBinding authMethod="BasicAuth" callbackHandler=
"com.ibm.wsspi.wssecurity.auth.callback.StdinPromptCallbackHandler"/>
</securityRequestSenderBindingConfig>
<securityResponseReceiverBindingConfig>
<signingInfos>
<signatureMethod algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<certPathSettings>
<trustAnchorRef ref="SampleClientTrustAnchor"/>
<certStoreRef ref="SampleCollectionCertStore"/>
</certPathSettings>
<canonicalizationMethod algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<digestMethod algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
</signingInfos>
<trustAnchors name="SampleClientTrustAnchor">
<keyStore storepass="{xor}PDM2OjEr" path=
"$${USER_INSTALL_ROOT}/etc/ws-security/samples/dsig-sender.ks" type="JKS"/>
</trustAnchors>
<certStoreList>
<collectionCertStores provider="IBMCertPath" name="SampleCollectionCertStore">
<x509Certificates path="$${USER_INSTALL_ROOT}/etc/ws-security/samples/intca2.cer"/>
</collectionCertStores>
</certStoreList>
<encryptionInfos name="EncInfo2">
<encryptionKey locatorRef="SampleReceiverEncryptionKeyLocator"/>
<encryptionMethod algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
<keyEncryptionMethod algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
</encryptionInfos>
<keyLocators name="SampleReceiverEncryptionKeyLocator" classname=
"com.ibm.wsspi.wssecurity.config.KeyStoreKeyLocator">
<keyStore storepass="{xor}PDM2OjEr" path=
"$${USER_INSTALL_ROOT}/etc/ws-security/samples/dsig-sender.ks" type="JKS"/>
<keys alias="soaprequester" keypass="{xor}PDM2OjEr" name="clientsignerkey"/>
</keyLocators>
</securityResponseReceiverBindingConfig>
</portQnameBindings>
</serviceRefs>
</com.ibm.etools.webservice.wscbnd:ClientBinding>
Serverseitiger erweiterter IBM Implementierungsdeskriptor
Der clientseitige erweiterte IBM-Implementierungsdeskriptor legt die folgenden Vorgaben fest:
- Prüft, ob SOAP-Body, Zeitmarke und Sicherheitstoken signiert sind.
- Prüft, ob der Inhalt des SOAP-Body und das Token mit dem Benutzernamen verschlüsselt sind.
- Prüft, ob das Token für die Basisauthentifizierung (Benutzername und Kennwort) im SOAP-Header für Web Services Security enthalten ist.
- Prüft, ob die Zeitmarke vorhanden ist (überprüft auch die Aktualität der Nachricht). Anhand der Aktualität der Nachricht kann festgestellt werden, ob die Nachricht den vordefinierten Zeitvorgaben entspricht.
- Signiert SOAP-Body und Zeitmarke.
- Verschlüsselt den Inhalt des SOAP-Body.
- Generiert die Zeitmarke mit einer Verfallszeit von 3 Minuten.
<?xml version="1.0" encoding="UTF-8"?>
<com.ibm.etools.webservice.wsext:WsExtension xmi:version="2.0"
xmlns:xmi="http://www.omg.org/XMI"
xmlns:com.ibm.etools.webservice.wsext=
http://www.ibm.com/websphere/appserver/schemas/5.0.2/wsext.xmi">
<wsDescExt wsDescNameLink="MyServ">
<pcBinding pcNameLink="Port1">
<serverServiceConfig actorURI="myActorURI">
<securityRequestReceiverServiceConfig>
<requiredIntegrity>
<references part="body"/>
<references part="timestamp"/>
<references part="securitytoken"/>
</requiredIntegrity>
<requiredConfidentiality">
<confidentialParts part="bodycontent"/>
<confidentialParts part="usernametoken"/>
</requiredConfidentiality>
<loginConfig>
<authMethods text="BasicAuth"/>
</loginConfig>
<addReceivedTimestamp flag="true"/>
</securityRequestReceiverServiceConfig>
<securityResponseSenderServiceConfig actor="myActorURI">
<integrity>
<references part="body"/>
<references part="timestamp"/>
</integrity>
<confidentiality>
<confidentialParts part="bodycontent"/>
</confidentiality>
<addCreatedTimestamp flag="true" expires="PT3M"/>
</securityResponseSenderServiceConfig>
</serverServiceConfig>
</pcBinding>
</wsDescExt>
</com.ibm.etools.webservice.wsext:WsExtension>
Serverseitige erweiterte IBM Bindungen
In den folgenden Bindungsinformationen werden je nach Installation einige der Standardbindungsinformationen, die auf Server- oder Zellenebene definiert sind, wiederverwendet. Beispiel: Der Anforderungsempfänger verweist auf den Zertifikatsspeicher SampleCollectionCertStore, und in der Standardbindung ist der Truststore SampleServerTrustAnchor definiert. Die Verschlüsselungsinformationen beim Anforderungsempfänger verweisen jedoch auf einen Key Locator SampleReceiverEncryptionKeyLocator, der in der Bindung auf Anwendungsebene definiert ist (dieselbe Datei ibm-webservices-bnd.xmi). In der Konfiguration des Antwortabsenders ist festgelegt, dass der Unterzeichnerschlüssel der digitalen Signatur der Anforderung verwendet werden soll, um die Antwort mit einer der Key-Locator-Standardimplementierungen (com.ibm.wsspi.wssecurity.config.CertInRequestKeyLocator) zu verschlüsseln.
<?xml version="1.0" encoding="UTF-8"?>
<com.ibm.etools.webservice.wsbnd:WSBinding xmi:version="2.0"
xmlns:xmi="http://www.omg.org/XMI"
xmlns:com.ibm.etools.webservice.wsbnd=
http://www.ibm.com/websphere/appserver/schemas/5.0.2/wsbnd.xmi">
<wsdescBindings wsDescNameLink="MyServ">
<pcBindings pcNameLink="Port1" scope="Session">
<securityRequestReceiverBindingConfig>
<signingInfos>
<signatureMethod algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<certPathSettings>
<trustAnchorRef ref="SampleServerTrustAnchor"/>
<certStoreRef ref="SampleCollectionCertStore"/>
</certPathSettings>
<canonicalizationMethod algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<digestMethod algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
</signingInfos>
<encryptionInfos name="EncInfo1">
<encryptionKey locatorRef="SampleReceiverEncryptionKeyLocator"/>
<encryptionMethod algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
<keyEncryptionMethod algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
</encryptionInfos>
<keyLocators name="SampleReceiverEncryptionKeyLocator" classname=
"com.ibm.wsspi.wssecurity.config.KeyStoreKeyLocator">
<keyStore storepass="{xor}LCswLTovPiws" path="$${USER_INSTALL_ROOT}/
etc/ws-security/samples/enc-receiver.jceks" type="JCEKS"/>
<keys alias="Group1" keypass="{xor}NDomLz4sLA==" name="CN=Group1"/>
<keys alias="bob" keypass="{xor}NDomLz4sLA==" name="CN=Bob, O=IBM, C=US"/>
</keyLocators>
</securityRequestReceiverBindingConfig>
<securityResponseSenderBindingConfig>
<signingInfo>
<signatureMethod algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<signingKey name="serversignerkey" locatorRef="SampleServerSignerKey"/>
<canonicalizationMethod algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<digestMethod algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
</signingInfo>
<encryptionInfo name="EncInfo2">
<encryptionKey locatorRef="SignerKeyLocator"/>
<encryptionMethod algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
<keyEncryptionMethod algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
</encryptionInfo>
<keyLocators name="SignerKeyLocator" classname=
"com.ibm.wsspi.wssecurity.config.CertInRequestKeyLocator"/>
</securityResponseSenderBindingConfig>
</pcBindings>
</wsdescBindings>
<routerModules transport="http" name="StockQuote.war"/>
</com.ibm.etools.webservice.wsbnd:WSBinding>