TCP/IP : sessions cryptées (SSL)
OpenSSL (on trouve facilement des versions compilées sur le net)
ou le produit IBM i 5733SC1 qui contient une version OpenSSL qui tourne sous PASE, voyez notre cours
Quelques commandes d'OpenSSL, pour créer un certificat autosigné.
openssl req -new -out monserveur.csr
créé un Certificat Signing Request (demande de certificat)> openssl req -new -out volubis.csr Generating a 1024 bit RSA private key .............++++++ .....++++++ writing new private key to 'privkey.pem' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]: FR State or Province Name (full name) [Some-State]: LA Locality Name (eg, city) []: Carquefou Organization Name (eg, company) [Internet Widgits Pty Ltd]: Volubis Organizational Unit Name (eg, section) []: Volubis Common Name (eg, YOUR name) []: www.volubis.fr <- mettre ici, le nom du serveur Email Address []: cmasse@volubis.fr Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:
An optional company name []: #
Cela créé deux fichiers volubis.csr (la demande de certificat)
et privkey.pem (la clé
privée)
openssl rsa -in privkey.pem -out monserveur.key
openssl rsa -in privkey.pem -out volubis.key
Enter pass phrase for privkey.pem: <- saisissez ici la PEM pass phrase
writing RSA key
#
cela créé un fichier volubis.key (la clé privée sans le mot de passe)
Enfin vous devez générer le certificat lui -même à partir de la clé par
openssl x509 -in monserveur.csr -out monserveur.cert -req -signkey monseurveur.key
openssl x509 -in volubis.csr -out volubis.cert -req -signkey volubis.key -days 365
Signature ok
subject=/C=FR/ST=LA/L=Carquefou/O=Volubis/OU=Volubis/CN=www.volubis.fr/emailAddress=cmasse@volubis.fr
Getting Private key
#
Pour importer un certificat il faut le .csr ou la clé privée
un fichier au format PKCS#12 (.p12 ou .pfx) contient l'ensemble des eléments (y compris la clé privée)
pour fabriquer un fichier pfx
openssl pkcs12 -export -inkey volubis.key -in monserveur.cert -name nom-de-serveur -out resultat.pfx
•pour configurer Apache sur I5/OS / IBM i , voyez ci-dessous
•pour configurer Apache sur plateforme "Intel" vous aurez besoin du fichier volubis.cert et volubis.key
a/ vérifiez que vous avez bien le module SSL ou bien téléchargez une version
le contenant
déjà
b/ Modifiez le fichier de configuration (httpd.conf)
Autres commandes d'OpenSSL utiles
openssl pcks12 -export in monserveur.cert -inkey monserveur.key -out certificat.p12
génération d'un certificat PKS directement importable dans les navigateurs
openssl pcks12 -in certificat.p12 -out certificat.pem -nodes
exportation d'un certificat PKS
Pour java
keytool -importkeystore -srckeystore certificat.p12 -srcstoretype PKCS12
-deststoretype
JKS - destkeystore certificat.jks
Keytool est un produit fournit avec le jdk (donc toujours présent sur System
I), il s'agit, sur l'exemple, de générer un certificate store
(JKS),
objet contenent des certificats pour java. Un produit comme KeytoolUI,
permet de gérer graphiquement de tels fichiers.
DCM (Digital Certificat Manager), option 34 de 5722/5733SS1, pour générer les certificats.
5722CAn pour gérer les clés du coté 400, jusqu'à la V5R30 (c'est inclus dans l'OS depuis la 5.4):
- AC1 pour des clés à 48 bits
- AC2 pour des clés à 56 bits
- AC3 pour des clés à 128 bits
5722CEn pour gérer les clés du coté PC (intégré au client aujourd'hui)
- n ayant le même sens (1 ,2 ou 3) et forcément la même valeur que la fonction précédent
Vous pouvez acheter vos certificats auprès d'un organisme de certification (Verisign par exemple)
ou bien s'il s'agit d'une utilisation interne, les générer vous même.
Pour cela vous devez configurez votre IBm i en tant qu'organisme certificateur:
Lancez l'administration du serveur WEB par "votre-adresse-ip:2001"
Et prenez l'option Gestionnaire de certificat numérique qui
correspond à DCM.
<- *SYSTEM manquant
nous crérons les certificats plus tard.
indiquez un mot de passe pour le protéger
Prenez ensuite l'option Select a certificate strore
saisisssez le mot de passe
nous y sommes !
Si vous souhaitez installer des certificats émis par des authorité bien connues
prenez cette option
et ajoutez les au certificate store *SYSTEM
Sinon, choisissez CREATE A CERTIFICATE AUTHORITY (autorité
habilitée à générer des certificats)
NE PERDEZ PAS LE MOT DE PASSE saisi ici !
l'option Install Certificate permet d'installer le certificat dans
votre navigateur
(la société fera partie
des sites de confiance, comme Verisign)
Puis vous indiquerez la durée de vie d'un certificat
émis par cette autorité:
Puis indiquez que ces applications doivent faire confiance à cette autorité (cochez tout)
ET voilà, vous pouvez ensuite configurez un magasin utilisant ce CA pour signer des objets (pas utilile dans la cadre de ce cours)
puis choisissez "create certificate", Vous passez ensuite
à la création de votre premier certificat :
serveur ou client
vous devez choisir soit
ATTENTION à deux choses
il s'agit du CSR vu en début de cours (la demande est signée avec votre clé privée)
copiez ce texte dans un fichier texte local pour sauvegarde, puis
faites une demande à votre organisme de certification
Il vous faudra, alors recopiez l'intégralité du texte
généré de
-----BEGIN NEW CERTIFICAT REQUEST-----
à
-----END NEW CERTIFICAT REQUEST-----
vous recevrez le certificat résultat (crypté avec la
clé publique de thawte, ici), par mail
copiez le certificat dans un fichier texte local (même principe), puis transférez
le sur l'AS/400, sans modification.
ensuite choisissez "importation"
puis indiquez les coordonnées du fichier texte
Si vous recevez le message d'erreur :
An error occurred during certificate validation. The issuer of the certificate may not be in the certificate store or the issuer may not be enabled.
Cela signifie que l'autorité de certification racine (ou une autorité intermédiaire) n'est pas enregistrée.
Ce document IBM vous explique comment extraire le certificat du site racine depuis un PC, ensuite installez le certificat extrait en respectant la hiérarchie
Si vous recevez le message d'erreur :
"No certificate request key was found. If you wish to receive the signed
certificate, you must use the same certificate storage that was used when the certificate was requested.
If this is an AC certificate, you must use the function to import the AC."
Cela signifie que vous essayez d'importer un certificat sans avoir fait la demande par DCM (CSR)
Si vous avez le certificat ET la clé
(cas de letsencrypt, par ex.) demandez à Openssl de vous fabriquer un fichier pfx
openssl pkcs12 -export -inkey volubis.key -in monserveur.cert -name nom-de-serveur -out resultat.pfx
Openssl vous demande de saisir un mot passe protégeant le fichier (2 fois)
C'est ce mot de passe qui vous sera demandé par DCM pendant l'importation
![]() |
<< Ici, Telnet |
Confirmez le certificat
ce qui vous ajoutait les lignes suivantes :
vous remarquerez le nom de l'application QIBM_HTTP_SERVER_votre-instance
vous verrez alors dans la listes des applications disponibles sous
DCM, une nouvelle ligne :
1/ indiquez que vous écoutez sur le port 443, en plus du port normal (80)
2/ créez un hôte virtuel pour votre adresse-ip/port 433 (afin de définir SSL uniquement sur ce port)
3/ définissez SSL pour cet hôte virtuel
Tout cela doit vous modifier votre configuration comme indiqué ci-dessous:
LoadModule ibm_ssl_module /QSYS.LIB/QHTTPSVR.LIB/QZSRVSSL.SRVPGM <VirtualHost 10.3.1.1:443> |
Vous pouvez profiter du bloc Virtual Host, pour définir un autre répertoire pour vos pages html (DocumentRoot), etc..
Si vous le souhaitez, vous pouvez forcer l'utilisation de https par :
<VirtualHost 10.3.1.1:80> |
Si vous avez de vrais hôtes virtuel, basés sur le nom :
NamevirtualHost 10.3.1.1 <VirtualHost 10.3.1.1> Il faut préciser le port 80 et/ou 443 sur chaque VirtualHost |
Sur les dernières versions du serveur d'administration HTTP , il y a un assistant pour enchainer tout cela
Choisissez Configure SSL sur votre serveur Apache (y compris en frontal d'un serveur d'applications)
L'assistant est lancé
Indiquez le port et si l'accès HTTPS remplace l'accès HTTP ou l'étend
Indiquez un le mot de passe du certificat store
ici, demandez la création d'un nouveau certificat
Indiquez un mot de passe
Indiquez s'il faut relancer le serveur Apache maintenant
Puis confirmez
le fichier httpd.conf a été modifié
L'application est bien associée au certificat dans DCM
Dans tous les cas, si le certificat est émis localement (autorité
non reconnue) , il n'est valable qu'en utilisation INTRANET.
D'ailleurs on vous affiche :
NETSCAPE![]() |
Internet Explorer![]() |
FireFox |
Chrome |
Attention, IE et Chrome importent les certificats dans le magasin de certificats Windows, Firefox dans un fichier cert8.db
sous IE, vous pouvez demander à voir le détail du
certificat .
Sous certaines versions de Firefox
Pour éviter cela , il faut :
Pour configurer HTTPAdmin (l'administration du serveur WEB) en https et utiliser le port 2010 à la place du port 2001
voyez ce lien https://www.ibm.com/support/pages/node/635463
Pour configurer Navigator for i en https et utiliser le port 2005 à la place du port 2004
Voyez ce lien https://www.ibm.com/support/pages/node/667835
Notez la localisation du magasin de certificats
Sur une session 5250
Sur le gestionnaire de scripts
Attention, ces certificats arriveront un jour à expiration, voyez comment les renouveler
Dernier point, l'IBM i en tant que client (ici avec comme exemple,
FTP)
1/ si le certificat est émis par un organisme public bien connu, passé au 2/
Sinon, vous devez commencer par importer le certificat qui valide
l'autorité de certification (CA)
Après avoir choisi le"Certificate Store" *SYSTEM
(créé le s'il le faut),
prenez l'option Manage certificates/Import Certificat/Certificate
Authority
puis importer le certificat de l'autorité
2/ Ensuite indiquez cette autorité en tant qu'autorité
à laquelle vous faites confiance, pour le client FTP par Manage
Application/define CA trust list/client
Choisissez le client FTP
Vous devez voir votre Autorité de certification (celle
importée ou bien celle publique), cochez là !
et voilà, pour lancer FTP, utilisez la commande FTP avec les paramètres SECCNN(*SSL) DTAPROT(*DFT | *PRIVATE)
la commande Ftp SECOpen est équivalente au paramètre SECCNN
la commande Ftp, SECData au paramètre DTAPROT
le client FTP recoit le certificat lors de la connexion, si l'autorité est jugée digne de confiance, la connexion a lieu :
Connecting to remote host aaa.bbb.ccc.ddd using port 21. 220 Welcome to ftp-srv 234 AUTH TLS successful Connection is secure. MONPROFIL 331 Password required for MONPROFIL. 230 User MONPROFIL logged in. UNIX Type: L8 200 PBSZ 0 successful 200 Protection set to Private Data protection level set to P. |
Sinon, vous recevez l'erreur TCP3D2C return
code -23.
Vous pouvez gérer les niveaux de protocole utilisés en modifiant l' application sous DCM
Modification d'une application
Choix du protocol
Algorithmes de cryptage (Cipher)
Algorithmes pour l'échange de clé temporaires pour crypter la session
Enfin
pour plus de questions sur DCM, voyez https://www.ibm.com/support/pages/digital-certificate-manager-dcm-frequently-asked-questions-and-common-tasks
• Il existe aussi des API DCM (voir Digital Certificate Management APIs)
par exemple QykmImportKeyStore importe un fichier .pks (au format PKCS12)
Avec quelques nouveautés V7R4 :
Gestion des autorités de certification de confiance :
Renouvellement d'un certificat
Cette API doit être appelée deux fois
Gestion des certificats assignés à une application :
Vous devez importer les certificats auto-signés dans le magasin utilisé par Java à l'aide de la commande Keytool
•Commencez par récupérer le certificat au format X.509
Sous Chrome, cliquez sur le cadenas
Sur le certificat, demandez le chemin de certification, puis sur l'autorité de certification (c'est elle qui n'est pas reconnue), cliquez sur Afficher le Certificat
Cette fois, vous êtes sur le certificat "racine", exportez le (Copier dans un fichier)
Cela lance l'assistant de Windows
Choisissez le format X.509 encodé (fichier.cer)
Indiquez le nom de fichier et Terminez
Sous Firefox
puis
Informations du certificat, faites afficher
Là aussi, cliquez bien sur l'autorité de certification avant d'exporter.
La suite se déroule à l'identique
Transférez ensuite ce certificat sur le serveur IBMi par FTP en binaire
•Autre possibilité copier le certificat de l'autorité de certification, depuis DCM
vous affiche
Sous une session 5250 créez un fichier .car par
touch -C 819 as400.cer
ou bien
EDTF as400.cer (puis F15, option 3 et indiquez un CCSID 819, avant la copie)
Il vous faut ensuite, alors recopiez l'intégralité du texte
généré de
-----BEGIN NEW CERTIFICAT REQUEST-----
à
-----END NEW CERTIFICAT REQUEST-----
•Enfin, importation dans le magasin de certificats utilisé par java
éventuellement dupliquez le magasin de certificats qui se trouve dans /QopenSys/QIBM/ProdData/javaVM/<votre jdk>/jre/lib/security/cacerts
(celui d'IBM, si vous le modifiez, pourrait être écrasé par une PTF future)
Puis sous QSH passez la commande keytool :
-import
- keystore /QOpenSys/QIBM/ProdData/JavaVM/jdk60/32bit/jre/lib/security/cacerts
ou une copie de ce fichier (qui contient les autorités de certification standard) que vous auriez faite avant
-storepass le mot de passe du fichier cacerts (sans modification de votre part "changeit")
-alias un-nom d'alias (sans ce paramètre myalias)
si vous avez exporté le certificat depuis DCM,l'affichage est légèrement différent (SHA256 en plus)
Puis faites en sorte que la JVM utilise ce certificat, pour cela faites un fichier SystemDefault.properties
Les possibilités sont examinées dans l'ordre ci-dessus
Indiquez alors :
Testons
STRSQL
Résultat
Sans ce paramétrage vous auriez reçu CPF50E3 avec com.ibm.db2.rest;HttpUDFException
Si vous rencontrez des problèmes de mise en place, voici comment Déboguer
Créez une deuxième version de votre fichier properties avec javax.net.debug=true
Lancez l'ordre SQL contenant la fonction écrite en Java (pas en 5250, cela provoquerai un affichage écran).
Le gestionnaire script sera parfait
vous trouverez ensuite un spool QPRINT, contenant :
Le magasin de certificat utilisé
les certificats des sites de confiance, chargés
Enfin, si tout va bien, le certificat utilisé lors de la connexion HTTPS
•Pour JDBC, Vous aurez au préalable assigné un certificat aux serveurs suivants
Récupérez le certificat et importez le dans un magasin de la même manière
faites en sorte que java utilise ce magasin selon les mêmes principes (fichier properties)
Lors de la connexion :
Copyright © 1995,2020 VOLUBIS