Web service et HTTPS
-
- Messages : 26
- Enregistré le : ven. 26 oct. 2018, 09:58:31
(sans sujet)
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 ?
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
JYSA
-
- Messages : 26
- Enregistré le : ven. 26 oct. 2018, 09:58:31
(sans sujet)
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)"}
"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
JYSA
-
- Site Admin
- Messages : 813
- Enregistré le : mer. 14 févr. 2007, 18:00:03
- Localisation : Nantes
- Contact :
(sans sujet)
C'est le danger des certificats auto-signés https://www.globalsign.fr/fr/centre-inf ... to-signes/
Christian Massé (Volubis.fr)
-
- Messages : 26
- Enregistré le : ven. 26 oct. 2018, 09:58:31
(sans sujet)
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é ?
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
JYSA
-
- Site Admin
- Messages : 813
- Enregistré le : mer. 14 févr. 2007, 18:00:03
- Localisation : Nantes
- Contact :
Domaine
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 ?
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)
-
- Messages : 26
- Enregistré le : ven. 26 oct. 2018, 09:58:31
(sans sujet)
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.
- 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
JYSA
-
- Site Admin
- Messages : 813
- Enregistré le : mer. 14 févr. 2007, 18:00:03
- Localisation : Nantes
- Contact :
certificat
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
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)
-
- Messages : 26
- Enregistré le : ven. 26 oct. 2018, 09:58:31
(sans sujet)
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.
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
JYSA