Web service et HTTPS

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

(sans sujet)

Message par jysaulieres »

Bonjour,

J'ai mis en place un webservice de test (sur le LAN) sur un IBMi V7R3 (niveau de cum 18242) et configuré également le HTTPS sur un autre port.
Quand j'interroge le webservice en http/https via Firefox/RestClient il me répond bien.
Sur mon IBM i :
- Le WS répond sur le port non sécurisé (via SQL / HTTPGETCLOB)
- Le WS ne répond pas sur le port sécurisé (via SQL / HTTPGETCLOB)
VALUES cast(SYSTOOLS.HTTPGETCLOB(
'https://10.x.x.x:10234/web/services/WSMAJ01/toto',
'<header name="Content-Type" value="application/json;charset=UTF-8"/
>') as char(2000))
réponse => CPF503E / CPF5104

J'ai suivi la doc :
http://www.volubis.fr/news/liens/courshtm/tcpip_ssl.htm
- Mon systeme est autorité de certification
- export CA vers mon navigateur Firefox
- config SSL du serveur web
extrait du httpd.conf :
10 Listen *:10134
11 Listen *:10234
12 SetEnv HTTPS_PORT 10234
...
23 <VirtualHost *:10234>
24 SSLEngine On
25 SSLAppName QIBM_HTTP_SERVER_WSMAJ01
26 SSLProtocolDisable SSLv2 SSLv3
27 </VirtualHost>

Doc "Pour les applications Java (particulièrement les fonctions HTTPxxx de SYSTOOLS)" :
- application QIBM_HTTP_SERVER_WSMAJ01 est bien associée à un certificat et à une autorité de certification
- export certificat CA via DCM (EDTF dans IFS)
- copie du fichier cacerts (de /QOpenSys/QIBM/ProdData/JavaVM/jdk80/32bit/jre/lib/security) dans un dossier spécifique IFS /WebServices/java_certif/v80/32bits/cacerts
- import certificat via keytools
keytool -import -file /exploit/cert_ws_tests.cer
-keystore /WebServices/java_certif/v80/32bits/cacerts
-storepass changeit
-alias wstests
=> "le certificat a été ajouté au fichier de clé"
- création SystemDefault.properties dans mon /home/user
javax.net.ssl.trustStore=/WebServices/java_certif/v80/32bits/cacerts
javax.net.ssl.trustStorePassword=changeit
- JAVA_HOME = /QOpenSys/QIBM/ProdData/JavaVM/jdk80/32bit

J'ai mis en place le Telnet sécurisé et le ftp sécurisé mais là je bloque.
Je ne maitrise pas les serveurs web, je ne fais qu'utiliser l'interface "IBM Web Administration for I" afin de mettre en place des web services. Nous n'avons pas de site web www sur nos systemes IBM i.
Qu'est ce que j'ai raté pour que les requetes SQL httpgetclob fonctionnent en local ?
Merci pour votre aide.
JYSA

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

HTTPS

Message par cmasse »

et depuis un simple navigateur, ca marche ?

et avec POSTMAN ?

pour savoir si l'on doit chercher plutôt coté serveur ou coté client (HTTPGETBLOB)
Christian Massé (Volubis.fr)

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

(sans sujet)

Message par jysaulieres »

Ca fonctionne avec RestClient sur Firefox après avoir ajouté l'adresse IP en exception :
"10.x.x.x:10234 uses an invalid security certificate. The certificate is not valid for the name 10.x.x.x. Error code: SSL_ERROR_BAD_CERT_DOMAIN".

Idem avec POSTMAN ça fonctionne en désactivant la vérification du certificat SSL (Self-signed SSL certificates are being blocked:
Fix this by turning off 'SSL certificate verification' in Settings > General)
=> https://10.x.x.x:10234/web/services/WSMAJ01/toto2 me répond correctement :
{"REPONSE": "toto2 en majuscule donne : TOTO2 (WSMAJ01)"}
Merci pour votre aide.
JYSA

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

(sans sujet)

Message par cmasse »

C'est le danger des certificats auto-signés https://www.globalsign.fr/fr/centre-inf ... to-signes/
Christian Massé (Volubis.fr)

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

(sans sujet)

Message par jysaulieres »

C'est bien pour ça que notre webservice ne sera appelé que sur notre LAN. A partir un IBM i (une partition) ou d'un serveur linux. Le but étant juste de crypter l'échange entre nos systèmes.
Pour vous, cela ne peut pas être mis en place ?
Impossible d'appeler un WS en https via une requète SQL (HTTPGETCLOB) avec un certificat autosigné ?
Merci pour votre aide.
JYSA

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

Domaine

Message par cmasse »

JE suis en train de faire qq tests.

qu'a votre certificat, dans "Common Name" ? ca doit être le nom du site (au sens DNS). pourquoi y aller par IP? je préférerais par nom DNS, justement celui du "common name"....

Autre chose, quel est le certificat importé, celui du serveur ou celui du l'autorité de certification (la racine) ?

Enfin que dit l'option javax.net.debug=true ?
Christian Massé (Volubis.fr)

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

(sans sujet)

Message par jysaulieres »

En suivant la doc :
- configuration SSL sur le serveur apache (nom : WSMAJ01)
- etape 4 de la config SSL, coche de "issue new certificat by CA"
=> création automatique d'un nouveau CA qui a pour nom
certificate : LOCAL_CERTIFICATE_AUTHORITY_ x(7)
common name : tests_CERTIFICATE_AUTHORITY
(notre LPAR se nomme "tests" et est référencée dans le DNS)

Au final :

Quand je vais dans DCM pour voir l'appli serveur :
Application ID: QIBM_HTTP_SERVER_WSMAJ01
Certificate currently assigned: QIBM_HTTP_SERVER_WSMAJ01

Quand je vais dans DCM voir le certificat :
Certificate type: Server
Certificate store: *SYSTEM
Certificate label: QIBM_HTTP_SERVER_WSMAJ01
subject / common name : tests
issuer / common name : tests_CERTIFICATE_AUTHORITY

J'ai exporté le CA via DCM.
Copie du fichier cacerts dans un dossier IFS, et importé le CA dans ce cacerts via keytools

La visu du fichier http.conf indique bien
 23    <VirtualHost *:10234>
  24         SSLEngine On
  25         SSLAppName QIBM_HTTP_SERVER_WSMAJ01
  26         SSLProtocolDisable SSLv2 SSLv3
  27    </VirtualHost>

Par contre quand je vais sur la console HTTPAdmin / Security et onglet "SSL with certificate authentification" j'ai : SSL = DISABLED
Je ne sais pas si le http.conf prend le pas sur l'onglet "security"

Quelques extraits du fichier de log:
jdk.tls.client.protocols is defined as null
SSLv3 protocol was requested but was not enabled
SSLv3 protocol was requested but was not enabled
SUPPORTED: [TLSv1, TLSv1.1, TLSv1.2]
SERVER_DEFAULT: [TLSv1, TLSv1.1, TLSv1.2]
CLIENT_DEFAULT: [TLSv1, TLSv1.1, TLSv1.2]
...
keyStore is: /QOpenSys/QIBM/ProdData/JavaVM/jdk80/32bit/jre/lib/security/cacerts
...
trustStore is: /WebServices/java_certif/v80/32bits/cacerts
...
***
%% Invalidated: [Session-1, SSL_ECDHE_RSA_WITH_AES_128_GCM_SHA256]
Thread-5, SEND TLSv1.2 ALERT: fatal, description = certificate_unknown
...
Thread-5, called closeSocket()
Thread-5, handling exception: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching tests found

Pas facile de donner les infos pertinentes quand on ne comprend pas bien le fonctionnement. Je peux faire des copies écrans / fichiers par mails si vous souhaitez.
Merci pour votre aide.
JYSA

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

certificat

Message par cmasse »

dans le trustStore c'est bien le certificat "racine" qu'il faut importer.

attention aussi à la JRE utilisée par le serveur de web service (il y a un magasin par JRE)


(voir la fin de ce cours) http://www.volubis.fr/news/liens/coursh ... ent73.html
Christian Massé (Volubis.fr)

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

Mail

Message par cmasse »

Des nouvelles ?

Si vous bloquez toujours on peut finir au téléphone (02 40 30 00 70 ) ou par mail :cmasseATvolubis.fr
Christian Massé (Volubis.fr)

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

(sans sujet)

Message par jysaulieres »

Vous m'avez mis sur la piste : c'etait bien le "common name" du certificat créé automatiquement qui ne fonctionnait pas.
En créant le certificat manuellement et en l'affectant au CA, puis, attribuer ce certificat à l'application, puis en intégrant le CA dans java, c'est passé.
Merci beaucoup pour vos conseils et informations.
Merci pour votre aide.
JYSA

Répondre