Exemple : configuration de la sécurité de services Web pour une application de version 5.x
Pour sécuriser une application de version 5.x avec la sécurité des Services Web, définissez les contraintes de sécurité dans les descripteurs de déploiement d'extension IBM® et dans les liaisons d'extension IBM. Les exemples de fichiers de clés et les informations des liaisons par défaut sont fournis pour un modèle de configuration afin de montrer le fonctionnement des liaisons et des extensions de descripteur de déploiement IBM.
- ${USER_INSTALL_ROOT}/etc/ws-security/samples/dsig-sender.ks
- Le mot de passe du fichier de clés est client.
- Le certificat digne de confiance avec le nom d'alias, soapca.
- Le certificat personnel avec le nom d'alias, soaprequester et le mot de passe clé client émis par l'intermédiaire de l'autorité de certification Int CA2, qui est elle-même émise par soapca.
- ${USER_INSTALL_ROOT}/etc/ws-security/samples/dsig-receiver.ks
- Le mot de passe du fichier de clés est server.
- Le certificat digne de confiance avec le nom d'alias, soapca.
- Le certificat personnel avec le nom d'alias, soapprovider et le mot de passe clé server émis par l'intermédiaire de l'autorité de certification Int CA2, qui est elle-même émise par soapca.
- ${USER_INSTALL_ROOT}/etc/ws-security/samples/enc-sender.jceks
- Le mot de passe du fichier de clés est storepass.
- Clé secrète CN=Group1, nom d'alias Group1 et mot de passe clé keypass.
- Clé publique CN=Bob, O=IBM, C=US, nom d'alias bob et mot de passe clé keypass.
- Clé privée CN=Alice, O=IBM, C=US, nom d'alias alice et mot de passe clé keypass.
- ${USER_INSTALL_ROOT}/etc/ws-security/samples/enc-receiver.jceks
- Le mot de passe du fichier de clés est storepass.
- Clé secrète CN=Group1, nom d'alias Group1 et mot de passe clé keypass.
- Clé privée CN=Bob, O=IBM, C=US, nom d'alias bob et mot de passe clé keypass.
- Clé publique CN=Alice, O=IBM, C=US, nom d'alias alice et mot de passe clé keypass.
- ${USER_INSTALL_ROOT}/etc/ws-security/samples/intca2.cer
- L'autorité de certification intermédiaire est Int CA2.
Liaison par défaut (au niveau de la cellule et du serveur)
- Points d'ancrage dignes de confiance
- Utilisées pour valider l'acceptation du certificat signataire.
- SampleClientTrustAnchor est utilisé par le récepteur de la réponse pour valider le certificat signataire.
- SampleServerTrustAnchor est utilisé par le récepteur de la demande pour valider le certificat signataire.
- Magasin de certificats de collection
- Utilisé pour valider le chemin d'accès au certificat.
- SampleCollectionCertStore est utilisé par le récepteur de la réponse et par le récepteur de la demande pour valider le chemin d'accès au certificat signataire.
- Localisateurs de clés
- Utilisés pour rechercher la clé pour la signature, le chiffrement et le déchiffrement.
- SampleClientSignerKey est utilisé par l'émetteur de demandes pour signer le message SOAP. Le nom de la clé de signature est clientsignerkey, qui peut être référencé dans les informations de signature comme le nom de la clé de signature.
- SampleServerSignerKey est utilisé par l'émetteur de la réponse pour signer le message SOAP. Le nom de la clé de signature est serversignerkey, qui peut être référencé dans les informations de signature comme le nom de la clé de signature.
- SampleSenderEncryptionKeyLocator est utilisé par l'émetteur pour chiffrer le message SOAP. Il est configuré pour utiliser le fichier de clés ${USER_INSTALL_ROOT}/etc/ws-security/samples/enc-sender.jceks et le localisateur de clés du fichier de clés com.ibm.wsspi.wssecurity.config.KeyStoreKeyLocator.
- SampleReceiverEncryptionKeyLocator est utilisé par le récepteur pour déchiffrer les messages SOAP. L'implémentation est configurée pour utiliser le fichier de clés ${USER_INSTALL_ROOT}/etc/ws-security/samples/enc-receiver.jceks et le localisateur de clés du fichier de clés com.ibm.wsspi.wssecurity.config.KeyStoreKeyLocator. L'implémentation est configurée pour le chiffrement symétrique (DES ou TRIPLEDES). Toutefois, pour utiliser cette implémentation pour le chiffrement asymétrique (RSA), vous devez ajouter la clé privée CN=Bob, O=IBM, C=US, le nom d'alias bob et le mot de passe clé keypass.
- SampleResponseSenderEncryptionKeyLocator est utilisé par l'émetteur de la réponse pour chiffrer le message de réponse SOAP. Il est configuré pour utiliser le fichier de clés ${USER_INSTALL_ROOT}/etc/ws-security/samples/enc-receiver.jceks et le localisateur de clés com.ibm.wsspi.wssecurity.config.WSIdKeyStoreMapKeyLocator. Ce localisateur de clé mappe une identité authentifiée (de l'unité d'exécution en cours) vers une clé publique pour le chiffrement. Par défaut, WebSphere Application Server est configuré pour un mappage vers la clé publique alice et vous devez modifier la configuration de WebSphere Application Server pour lui affecter l'utilisateur approprié. Le localisateur de clé SampleResponseSenderEncryptionKeyLocator peut également définir une clé par défaut pour le chiffrement. Par défaut, ce localisateur de clé est configuré pour utiliser la clé publique alice.
- Evaluateur d'ID digne de confiance
- Permet d'établir une relation de confiance avant d'assumer l'identité
dans le cadre du processus d'assertion d'identité.SampleTrustedIDEvaluator est configuré pour utiliser l'implémentation com.ibm.wsspi.wssecurity.id.TrustedIDEvaluatorImpl. L'implémentation par défaut de com.ibm.wsspi.wssecurity.id.TrustedIDEvaluator contient une liste des identités dignes de confiance. La liste est définie sous forme de propriétés associées à trustedId_* en tant que clé et valeur de l'identité digne de confiance. Définissez ces informations au niveau du serveur dans la console d'administration en procédant comme suit :
- Cliquez sur .
- Dans la section Propriétés supplémentaires, cliquez sur .
- Mappage de connexion
- Permet d'authentifier le jeton de sécurité entrant dans l'en-tête SOAP de la sécurité des services Web d'un message SOAP.
- La méthode d'authentification BasicAuth est utilisée pour authentifier le jeton de sécurité du nom d'utilisateur (nom d'utilisateur et mot de passe).
- La méthode d'authentification par signature est utilisée pour mapper un nom distinctif (DN) dans un sujet JAAS (Java™ Authentication and Authorization Server) WebSphere Application Server.
- La méthode d'authentification IDAssertion permet de mapper une identité digne de confiance dans un sujet JAAS WebSphere Application Server pour l'assertion d'identité.
- La méthode d'authentification LTPA (Lightweight Third Party Authentication) est utilisée pour valider un jeton de sécurité LTPA.
Exemple de configuration
Les exemples ci-dessous décrivent la fonction des extensions et des liaisons du descripteur de déploiement IBM. Pour une plus grande clarté, les informations superflues ont été supprimées dans les exemples. Ne copiez/collez pas ces exemples dans les descripteurs de déploiement d'application ou les liaisons. Ces exemples sont fournis à titre de référence uniquement et ne sont pas représentatifs de la configuration recommandée.
- Utilisez un outil d'assemblage pour créer ou éditer les extensions du descripteur de déploiement IBM.
- Utilisez un outil d'assemblage ou la console d'administration pour créer ou modifier le fichier de liaisons.
- Signature du corps SOAP, de l'horodatage et du jeton de sécurité.
- Chiffrement du contenu du corps et du jeton du nom d'utilisateur.
- Envoi du jeton du nom d'utilisateur (données d'authentification de base).
- Génération de l'horodatage pour la demande.
Pour la réponse, le corps SOAP et l'horodatage sont signés, le contenu du corps est chiffré et l'heure d'arrivée du message SOAP est vérifiée à l'aide de l'horodatage. L'ancienneté du message indique si le message est compatible avec les contraintes de temps prédéfinies.
L'émetteur et le récepteur de la demande constituent une paire. Il en va de même pour l'émetteur et le récepteur de la réponse.
Extension du descripteur de déploiement IBM côté client
L'extension du descripteur de déploiement IBM côté client décrit les contraintes suivantes :
- Signe le corps SOAP, l'horodatage et le jeton de sécurité.
- Chiffre le contenu du corps et du jeton du nom d'utilisateur.
- Envoie le jeton d'authentification de base (nom d'utilisateur et mot de passe).
- Génère l'horodatage pour qu'il expire dans un délai de trois minutes.
- Vérifie que le corps SOAP et l'horodatage sont signés.
- Vérifie que le contenu du corps SOAP est chiffré.
- Vérifie que l'horodatage est présent (et vérifie l'heure d'arrivée du message).
<?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/MonServ">
<portQnameBindings portQnameLocalNameLink="Port1">
<clientServiceConfig actorURI="MonURIActeur">
<securityRequestSenderServiceConfig actor="MonURIActeur">
<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>
Liaisons d'extension IBM côté client
L'exemple 2 présente la liaison de l'extension IBM côté client pour les contraintes de sécurité décrites précédemment dans la section relative aux extensions du descripteur de déploiement IBM côté client.
La clé du signataire et la clé de chiffrement (et de déchiffrement) pour le message peuvent être obtenues à partir de l'implémentation du localisateur de clé du fichier de clés (com.ibm.wsspi.wssecurity.config.KeyStoreKeyLocator). La clé du signataire est utilisée pour chiffrer la réponse. L'exemple est configuré pour utiliser l'API Java Certification Path pour valider le chemin d'accès au certificat du signataire de la signature numérique. Les données du jeton du nom d'utilisateur (authentification de base) sont collectées à partir des invites stdin via l'une des implémentations JAAS par défaut :javax.security.auth.callback.CallbackHandler (com.ibm.wsspi.wssecurity.auth.callback.StdinPromptCallbackHandler).
<?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/MonServ">
<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>
Extension du descripteur de déploiement IBM côté serveur
L'extension du descripteur de déploiement IBM côté client décrit les contraintes suivantes :
- Vérifie que le corps SOAP, l'horodatage et le jeton de sécurité sont signés.
- Vérifie que le contenu du corps SOAP et le jeton du nom d'utilisateur sont chiffrés.
- Vérifie que le jeton d'authentification de base (nom d'utilisateur et mot de passe) se trouvent dans l'en-tête SOAP de la sécurité des Services Web.
- Vérifie que l'horodatage est présent (et vérifie l'heure d'arrivée du message). L'ancienneté du message indique si le message est compatible avec les contraintes de temps prédéfinies.
- Signe le corps SOAP et l'horodatage.
- Chiffre le contenu du corps SOAP.
- Génère l'horodatage pour qu'il expire dans un délai de 3 minutes.
<?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="MonServ">
<pcBinding pcNameLink="Port1">
<serverServiceConfig actorURI="MonURIActeur">
<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="MonURIActeur">
<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>
Liaisons d'extension IBM côté serveur
Les informations de liaison suivantes réutilisent en partie les informations de liaison par défaut définies au niveau du serveur ou de la cellule, selon l'installation. Par exemple, le récepteur de la demande référence le magasin de certification SampleCollectionCertStore et le magasin de tiers dignes de confiance SampleServerTrustAnchor est défini dans la liaison par défaut. Toutefois, les informations de chiffrement dans le récepteur de la demande référence un localisateur de clé SampleReceiverEncryptionKeyLocator défini dans la liaison au niveau de l'application (le même fichier ibm-webservices-bnd.xmi). L'émetteur de la réponse est configuré pour utiliser la clé du signataire de la signature numérique de la demande pour chiffrer la réponse à l'aide de l'une des implémentations de localisateur de clé par défaut (com.ibm.wsspi.wssecurity.config.CertInRequestKeyLocator).
<?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="MonServ">
<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>