Appel WS sur internet via un proxy

configuration Apache, Zend et PHP , Web services
Répondre
jysaulieres
Messages : 26
Enregistré le : ven. 26 oct. 2018, 09:58:31

Appel WS sur internet via un proxy

Message par jysaulieres »

Bonjour,
Je n'arrive pas à appeler un web service sur internet.
Malgré le paramétrage du fichier /WS/SystemDefault.properties :
http.proxyHost=192.168.3.3
http.proxyPort=1234
file.encoding=UTF-8
os400.stdio.convert=Y

Et la modification de la variable d'environnement :
ADDENVVAR ENVVAR(QIBM_JAVA_PROPERTIES_FILE) VALUE('/WS/SystemDefault.properties')

J'arrive à joindre notre FW mais il semble que j'essaye d'acceder en direct à internet sans demander à passer par le 192.168.3.3 (et donc je suis rejeté et timeout) malgré le ADDENVVAR
Si j'appelle le WS à partir de mon poste Windows via RESTClient ca fonctionne très bien.
Comment faire pour être sûr que lors de l'appel du WS via le power system je demande bien à passer par l'adresse du proxy ? Une trace (spoule ou autre) ou l'adresse ip du proxy apparait ?

Je suis en V7R3 TR8 (niveau de cum : C0128730)

en ligne de commande le rentre le addenvvar
puis par SQL je fais un HTTPPOSTCLOB

Merci pour votre aide.
Merci pour votre aide.
JYSA

cmasse
Site Admin
Messages : 813
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

Re: Appel WS sur internet via un proxy

Message par cmasse »

Une question comme ça..quel est le CCSID du fichier ? pas 297 ?

en bref, est-il lisible par java ?
Christian Massé (Volubis.fr)

jysaulieres
Messages : 26
Enregistré le : ven. 26 oct. 2018, 09:58:31

Re: Appel WS sur internet via un proxy

Message par jysaulieres »

CCSID du fichier .properties en 850, et ccsid du job 297.

Voici les étapes :
- chgjob ccsid(297)
- ADDENVVAR ENVVAR(QIBM_JAVA_PROPERTIES_FILE) VALUE('/WS/WSTF3.properties')
- STRSQL
- VALUES cast(SYSTOOLS.HTTPPOSTCLOB(
'http://xxxxxxxxxxxxx.com/fr/api/gls/round_token/',
'<header name="token"
value="yyyyyyyyyyyyyyyyyyyyy"/>',
'{"round_token": "99999823072020"}') as char(2000))

(le service fonctionne actuellement en HTTP pour test et HTTPS pour prod)
Et autre question : comme il s'agira a terme d'un HTTPS, je vais devoir rajouter le certificat dans le fichier cacert sur l'IBM I ?
Merci pour votre aide.
JYSA

cmasse
Site Admin
Messages : 813
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

Re: Appel WS sur internet via un proxy

Message par cmasse »

Bizarre, tout semble correspondre.....

et oui, il faudra récupérer le certificat du site et l'incorporer au magasin de certificats JAVA.

ce document rappelle le processus pour le fichier propriété et indique comment utiliser un fichier de certificat particulier

https://www.ibm.com/support/pages/sites ... _udtfs.pdf
Christian Massé (Volubis.fr)

jysaulieres
Messages : 26
Enregistré le : ven. 26 oct. 2018, 09:58:31

Re: Appel WS sur internet via un proxy

Message par jysaulieres »

Y a t'il moyen d'avoir des logs java pour que je montre a l'équipe réseau que j'appelle bien avec l'adresse du proxy et le port ?
Merci pour votre aide.
JYSA

cmasse
Site Admin
Messages : 813
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

Re: Appel WS sur internet via un proxy

Message par cmasse »

Je pensais plus à TRCCNN en indiquant "remote IP address" dans TCPDTA (2ème écran)
Christian Massé (Volubis.fr)

jysaulieres
Messages : 26
Enregistré le : ven. 26 oct. 2018, 09:58:31

Re: Appel WS sur internet via un proxy

Message par jysaulieres »

EUREKA :)
Comme ça ne fonctionnait pas (la trace ne me donnait pas d'indication non plus), j'ai COPIE mon fichier de config dans le dossier par défaut /QIBM/UserData/Java400/SystemDefault.properties (et donc sans faire de ADDENVVAR)... et ça fonctionne, je passe bien par le proxy.
Donc si je mets le fichier de config dans un autre dossier :
- soit le ADDENVVAR n'est pas pris en compte lors de l'exécution (la variable d'environnement apparaît bien qd je fais un WRKENVVAR)
- soit le contenu du fichier n'est pas pris en compte lors de l'exécution
Ca ne m'arrange pas car nous appelons d'autres WS en interne sur notre système de prod et donc nous ne devons pas passer par le proxy. Je vais tester avec le parametre http.nonProxyHosts
Merci pour votre aide.
JYSA

jysaulieres
Messages : 26
Enregistré le : ven. 26 oct. 2018, 09:58:31

Re: Appel WS sur internet via un proxy

Message par jysaulieres »

J'ai compris d'où venait mon erreur : le fichier de config .properties est lu une fois pour toute au 1er lancement mais n'est pas relu par la suite : toutes les modifs que je faisais n'étaient pas prises en compte, il fallait que je relance la session 5250 à chaque fois que je faisais une modif dans le fichier.

Voilà les différentes étapes pour ceux qui rencontreraient le même problème :
1) export des certificats du site https sur firefox (comme il y a 3 certificats dans la hierarchie, j'exporte les 3) en X509
2) création fichier certif1.cer en ccsid 819 dans /certif/TF/certif1.cer sur IBMi (touch -C)
3) copier/coller contenu du 1er certificat (du ---- BEGIN jusqu'au ----- END---- compris) dans /certif/TF/certif1.cer par EDTF
4) JAVA_HOME (niveau *SYS)= /QOpenSys/QIBM/ProdData/JavaVM/jdk80/32bit/, donc copie de /QOpenSys/QIBM/ProdData/JavaVM/jdk80/32bit/jre/lib/security/cacerts vers /certif/TF/cacerts
5) Import certificat
keytool -import -file /certif/TF/CERTIF1.cer
-keystore /certif/TF/cacerts -storepass changeit -alias TF1
confirmation avec "oui"
6) idem avec les 2 autres certificats => verif avec keytool -list -keystore /certif/TF/cacerts -storepass changeit => j'ai bien mes 3 certificats
7) ouverture session 5250
8 ) mise a jour variable environnement
ADDENVVAR ENVVAR(QIBM_JAVA_PROPERTIES_FILE) VALUE('/certif/TF/TF3ssl.properties')
contenu du fichier /certif/TF/TF3ssl.properties
http.proxyHost=192.168.1.1
http.proxyPort=8010
https.proxyHost=192.168.1.1
https.proxyPort=8010
file.encoding=UTF-8
os400.stdio.convert=Y
javax.net.ssl.trustStore=/certif/TF/cacerts
javax.net.ssl.trustStorePassword=changeit
9) STRSQL
VALUES cast(SYSTOOLS.HTTPPOSTCLOB(
'https://LeSite.com/fr/api/',
'<httpHeader followRedirects="true">
<header name="Content-Type" value="application/json"/>
<header name="token"
value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"/>
</httpHeader>' ,
'{"round_token":"99999901012020"}') as char(2000))
Merci pour votre aide.
JYSA

Répondre