Sécurisation des clients JAX-RS à l'aide de SSL

Vous pouvez sécuriser les communications entre l'application Java™ API for RESTful Web Services (JAX-RS) et les clients qui appellent l'application à l'aide du protocole SSL/TLS.

Avant de commencer

Cette tâche suppose que vous avez déjà exécuté les étapes suivantes :
  • Vous avez défini un profil de cellule sur un serveur d'applications ou sur un serveur d'applications fédéré à un gestionnaire de déploiement réseau. Consultez la rubrique relative à la création des profils de cellule pour savoir comment créer des profils de cellule qui contiennent un noeud de serveur d'applications fédéré et un gestionnaire de déploiement.
  • Vous avez installé votre application JAX-RS sur le serveur d'applications.

Pourquoi et quand exécuter cette tâche

Les programmes client JAX-RS peuvent tirer parti de la sécurité du transport en utilisant SSL (Secure Socket Layer) pour protéger les demandes et les réponses des ressources JAX-RS.

Si vous avez configuré votre application JAX-RS afin qu'elle utilise un canal SSL pour la sécurité de niveau transport lorsqu'elle démarre des ressources REST, votre client JAX-RS doit utiliser la connexion SSL pour pouvoir interagir avec une ressource JAX-RS qui est déployée dans l'environnement WebSphere Application Server. Par exemple, si la configuration de votre application JAX-RS fait appel à l'authentification de base, il est courant d'utiliser SSL pour transporter les données d'identification de l'utilisateur sur des connexions sécurisées.

Pour illustrer ce scénario, supposons que votre cellule contienne un serveur d'applications et que les ressources JAX-RS soient déployées sur ce serveur. Les ressources JAX-RS de ce serveur requièrent l'utilisation de SSL. Supposons que vous utilisiez Thin Client for JAX-RS, un client autonome basé sur Java fourni avec ce produit, pour appeler l'une de ces ressources sécurisées qui nécessitent l'utilisation de SSL. Thin Client for JAX-RS permet d'exécuter des applications client de services Web JAX-RS RESTful non gérées, dans un environnement non WebSphere, pour appeler les services Web JAX-RS RESTful hébergés par le serveur d'applications.

Figure 1. Sécurisation des clients JAX-RS à l'aide de SSL
Vous pouvez configurer des applications client SSL pour JAX-RS, pour permettre au client d'interagir avec des ressources d'applications JAX-RS nécessitant SSL.
Important : Si vous appelez des ressources JAX-RS à partir d'une application qui s'exécute dans un environnement WebSphere Application Server, par exemple lorsque vous passez un appel en aval, aucune configuration supplémentaire n'est requise pour SSL. Il est inutile de configurer des connexions SSL pour cette ressource, puisque l'exécution et la configuration SSL du serveur d'applications sont utilisées.

Procédez comme suit pour configurer SSL avec le client léger Thin Client for JAX-RS.

Procédure

  1. Activez la sécurité pour votre application JAX-RS et configurez cette dernière de sorte qu'elle utilise un canal SSL pour le transport lors de l'appel des ressources REST.

    Lors du développement ou du déploiement d'applications, éditez le fichier web.xml afin d'y ajouter une contrainte de sécurité indiquant que SSL doit être utilisé pour vos ressources. Pour plus de détails sur l'activation de SSL pour votre application, consultez la rubrique relative à la sécurisation des applications JAX-RS dans le conteneur Web.

    L'élément suivant, à l'intérieur de l'élément security-constraint, définit l'imposition de SSL pour l'application :
    <user-data-constraint id="UserDataConstraint_1">
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
     </user-data-constraint>
  2. Editez le fichier ssl.client.props et définissez les propriétés du fichier de clés et du fichier de clés certifiées.
    Le fichier ssl.client.props est utilisé pour configurer SSL pour les clients. L'exemple de code suivant illustre la définition des propriétés du fichier de clés et du fichier de clés certifiées :
    # keystore information
    com.ibm.ssl.keystoreName=ClientDefaultKeyStore
    com.ibm.ssl.keyStore= path/to/keystore/file 
    com.ibm.ssl.keyStorePassword=xxxxxxx
    com.ibm.ssl.keyStoreType=PKCS12
    com.ibm.ssl.keyStoreProvider=IBMJCE
    com.ibm.ssl.keyStoreFileBased=true
    
    # truststore information
    com.ibm.ssl.trustStoreName=ClientDefaultTrustStore
    com.ibm.ssl.trustStore=path/to/truststore/file
    com.ibm.ssl.trustStorePassword=xxxxxx
    com.ibm.ssl.trustStoreType=PKCS12
    com.ibm.ssl.trustStoreProvider=IBMJCE
    com.ibm.ssl.trustStoreFileBased=true
    com.ibm.ssl.trustStoreReadOnly=false
  3. Activez ou désactivez la vérification du nom d'hôte.

    La propriété com.ibm.ssl.performURLHostNameVerification met en oeuvre la vérification du nom d'hôte de l'URL lorsqu'elle a la valeur true. Lorsque des connexions URL HTTP sont effectuées sur des serveurs cibles, le nom commun (CN) du certificat du serveur doit correspondre au nom de l'hôte cible. En l'absence de correspondance, le vérificateur du nom de l'hôte refuse la connexion. La valeur par défaut false omet cette vérification.

    La propriété com.ibm.ssl.validationEnabled valide chaque configuration SSL au moment de son chargement, lorsqu'elle a la valeur true. La valeur par défaut false omet cette vérification.

    com.ibm.ssl.performURLHostNameVerification=false
    com.ibm.ssl.validationEnabled=false
  4. Vérifiez que le signataire du certificat du serveur est bien dans le fichier de clés certifiées du client.

    Utilisez l'outil IBM® iKeyman ou l'utilitaire de clé Java pour déterminer si le certificat figure déjà dans le fichier de clés certifiées. Si tel n'est pas le cas, importez le certificat dans le fichier de clés certifiées.

    Par exemple, pour établir la liste des certificats contenus dans le fichier de clés certifiées trust.p12, saisissez la commande suivante en prenant soin d'inclure la totalité du chemin du fichier de clés certifiées :

    keytool -list -v -storetype pkcs12 -keystore trust.p12
  5. Importez le certificat.

    Si le signataire du certificat du serveur n'est pas dans le fichier de clés certifiées du client, ou si le serveur dispose d'un certificat autosigné qui n'y est pas non plus, importez le certificat.

    Pour importer le certificat, vous pouvez utiliser soit votre outil préféré soit l'utilitaire IBM iKeyman ou l'utilitaire de clé Java. Dans les exemples ci-dessous, Java keytool est utilisé.

    1. Exportez dans un fichier le certificat de signataire de votre serveur.

      Par exemple, utilisez la commande suivante pour exporter un certificat de signataire à partir du fichier de clés certifiées existant servertrust.p12, dans l'entrée qui correspond au nom d'alias default_signer, dans le fichier mycert.cer :

      keytool -export -storetype pkcs12 -alias default_signer -file mycert.cer -keystore servertrust.p12
    2. Importez le certificat de signataire dans le fichier de clés certifiées utilisé par le client léger Thin Client for JAX-RS.

      Par exemple, utilisez la commande suivante pour exporter un certificat de signataire à partir du fichier de clés certifiées existant, servertrust.p12, depuis l'entrée qui correspond au nom d'alias default_signer, dans le fichier mycert.cer :

      keytool -export -storetype pkcs12 -alias default_signer -file mycert.cer -keystore servertrust.p12
  6. Configurez SSL avec le client léger pour JAX-RS 2.0.

    Pour appeler une URL chiffrée, procédez comme suit :

    1. Pour activer la couche SSL client lorsque vous développez votre application client, ajoutez une propriété client dans votre code d'application de client léger.

      Affectez à la clé de propriété client la valeur com.ibm.ws.jaxrs.client.ssl.config et attribuez sa valeur à l'alias SSL de serveur. Voir le fragment de code suivant :

      ClientBuilder cb = ClientBuilder.newBuilder();
      cb.property("com.ibm.ws.jaxrs.client.ssl.config", "NodeDefaultSSLSettings");
      Conseil : La valeur de propriété correspond à l'alias SSL de serveur que vous définissez. Pour plus d'informations, accédez à Serveurs d'applications->serveur n, où n est le numéro que vous avez affecté au serveur d'applications.->Chaînes de transport de conteneur Web->WCInboundDefaultSecure->Canal entrant SSL (SSL_2) pour le vérifier sous la zone Configuration SSL.
    2. Pour appeler une URL chiffrée, exécutez l'exemple de code suivant à partir de la ligne de commande :
      [HP-UX][Linux][Solaris]
      java -Dcom.ibm.SSL.ConfigURL=file:///$WAS_HOME/AppServer/profiles/AppSrv01/properties/ssl.client.props -cp .:$WAS_HOME/AppServer/runtimes/com.ibm.jaxrs1.1.thinclient_$VERSION.jar:$WAS_HOME/AppServer/runtimes/com.ibm.jaxws.thinclient_$VERSION.jar:$WAS_HOME/AppServer/com.ibm.ws.admin.client_$VERSION.jar:$WAS_HOME/AppServer/plugins/com.ibm.ws.security.crypto.jar your_package.SSLThinClientProgram <An encrypted URL>
      [Windows]
      java -Dcom.ibm.SSL.ConfigURL=file:///$WAS_HOME/AppServer/profiles/AppSrv01/properties/ssl.client.props -cp .;$WAS_HOME/AppServer/runtimes/com.ibm.jaxrs1.1.thinclient_$VERSION.jar;$WAS_HOME/AppServer/runtimes/com.ibm.jaxws.thinclient_$VERSION.jar;$WAS_HOME/AppServer/runtimes/com.ibm.ws.security.crypto.jar;$WAS_HOME/AppServer/plugins/com.ibm.ws.security.crypto.jar your_package.SSLThinClientProgram <An encrypted URL>

Résultats

Vous avez défini une connexion sécurisée entre le client et le serveur cible en utilisant SSL pour garantir l'intégrité et la confidentialité des communications entre l'application JAX-RS et votre client.

Exemple

Le fragment de code ci-dessous représente un exemple de fichier sample ssl.client.props :
# keystore information
com.ibm.ssl.keyStoreName=ClientDefaultKeyStore
com.ibm.ssl.keyStore=c:/jaxrs/test/config/keystore.p12 
com.ibm.ssl.keyStorePassword=testpasswd
com.ibm.ssl.keyStoreType=PKCS12
com.ibm.ssl.keyStoreProvider=IBMJCE
com.ibm.ssl.keyStoreFileBased=true

# truststore information
com.ibm.ssl.trustStoreName=ClientDefaultTrustStore
com.ibm.ssl.trustStore= c:/jaxrs/test/config/truststore.p12
com.ibm.ssl.trustStorePassword=testpasswd
com.ibm.ssl.trustStoreType=PKCS12
com.ibm.ssl.trustStoreProvider=IBMJCE
com.ibm.ssl.trustStoreFileBased=true
com.ibm.ssl.trustStoreReadOnly=false

# Host name verification information
com.ibm.ssl.performURLHostNameVerification=false
com.ibm.ssl.validationEnabled=false

Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_impl_securejaxrs_clientssl
Nom du fichier : twbs_jaxrs_impl_securejaxrs_clientssl.html