Dépannage : Services Web

Incident : les services Web renvoient un code de défaut (fault) et une chaîne de défaut dans le corps SOAP (exemple 1).

Vous recevez une erreur similaire à celle de l'exemple suivant :


<soapenv:Envelope
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header/>
   <soapenv:Body>
      <soapenv:Fault>
     
<faultcode>soapenv:Server.generalException</faultcode>
     
<faultstring>com.ibm.wsspi.channel.framework.exception.ChannelException:
com.ibm.wsspi.channel.framework.exception.ChannelException:
 Invalid trust file name of null</faultstring>
      </soapenv:Fault>
   </soapenv:Body>
</soapenv:Envelope>

Solution :

Le client de services Web n'a pas spécifié de fichier de clés certifiées (truststore) ; vous devez donc le configurer pour qu'il fasse référence au fichier de base de données de clés. Ajoutez les lignes suivantes au code du client de services Web :

System.setProperty("javax.net.ssl.trustStore"," filename"); System.setProperty("javax.net.ssl.trustStorePassword"," password"); System.setProperty("javax.net.ssl.keyStore"," filename"); System.setProperty("javax.net.ssl.keyStorePassword"," password");

Où :

  • filename est le nom du fichier de la base de données de clés ; par exemple, C:/key.jks.
  • password est le mot de passe du fichier de la base de données de clés.

Vous pouvez aussi ajouter ces propriétés comme des arguments de ligne de commande ; par exemple, -Djavax.net.ssl.trustStore=

nomfichier

Incident : les services Web renvoient un code de défaut (fault) et une chaîne de défaut dans le corps SOAP (exemple 2)

Vous recevez une erreur similaire à celle de l'exemple suivant :


<soapenv:Envelope
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"t;
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header/>
   <soapenv:Body>
      <soapenv:Fault>
     
<faultcode>soapenv:Server.generalException</faultcode>
     
<faultstring>com.ibm.wsspi.channel.framework.exception.ChannelException:
com.ibm.wsspi.channel.framework.exception.ChannelException:
No key store specified and no hardware crypto
defined</faultstring>
      </soapenv:Fault>
   </soapenv:Body>
</soapenv:Envelope>

Solution :

Le client de services Web n'a pas spécifié de fichier de clés certifiées (truststore) ; vous devez donc le configurer pour qu'il fasse référence au fichier de base de données de clés. Ajoutez les lignes suivantes au code du client de services Web :

System.setProperty("javax.net.ssl.trustStore", " filename"); System.setProperty("javax.net.ssl.trustStorePassword", " password"); System.setProperty("javax.net.ssl.keyStore", " filename"); System.setProperty("javax.net.ssl.keyStorePassword", "password");

où :

  • filename est le nom du fichier de la base de données de clés ; par exemple, C:/key.jks.
  • password est le mot de passe du fichier de la base de données de clés. Vous pouvez aussi ajouter ces propriétés comme des arguments de ligne de commande ; par exemple, -Djavax.net.ssl.trustStore= filename

Incident : les services Web renvoient un code de défaut (fault) et une chaîne de défaut dans le corps SOAP (exemple 3).

Vous recevez une erreur similaire à celle de l'exemple suivant :


 <?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header/>
   <soapenv:Body>
      <soapenv:Fault>
     
<faultcode>soapenv:Server.generalException</faultcode>
      <faultstring>WSWS3713E: Connection to the remote host
localhost failed.Received the following error: Handshake terminated
SSL engine:
CLOSED</faultstring>
      </soapenv:Fault>
   </soapenv:Body>
</soapenv:Envelope>

Solution :

Dans le fichier de clés certifiées (truststore) référencé par le client de services Web, le certificat de serveur n'est pas un certificat de signataire. Procédez comme suit :

  1. Extrayez le certificat autosigné et ajoutez-le à une nouvelle base de données de clés.
  2. A l'aide de l'utilitaire de gestion de clés, ouvrez keyfile.kdb, sélectionnez le certificat autosigné et cliquez sur Extraction de certificat pour extraire le certificat dans un fichier.
  3. Dans l'utilitaire de gestion de clés, sélectionnez Fichier de base de données de clés > Nouveau pour créer un nouveau fichier de base de données de clés. Remarque : Le type de la base de données de clés doit être "JKS". Tapez le nom et le mot de passe choisis pour le fichier de base de données de clés.
  4. Sélectionnez Certificats de signataire et cliquez sur Ajout pour ajouter le certificat autosigné au fichier du magasin de clés. Tapez le label du certificat.
  5. Fermez l'utilitaire de gestion de clés afin de sauvegarder les changements.