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 :
- Extrayez le certificat autosigné et ajoutez-le à une nouvelle base de données de clés.
- 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.
- 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.
- 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.
- Fermez l'utilitaire de gestion de clés afin de sauvegarder les changements.