TCP/IP : sessions cryptées (SSL)

Pour configurer SSL sur plateforme "Intel" ou en mode commande , il vous faut :

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.


Pour gérer vos certificats depuis l'IBM i, vous devez installer :

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):

5722CEn pour gérer les clés du coté PC (intégré au client aujourd'hui)


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.


vous allez utiliser des certificats pour crypter :

1/ vos applications (l'AS/400 étant le client ou le serveur)
vous utiliserez alors un protocole nommé SSL

2/ pour signer des objets ou des utilisateurs (hors de ce cours)

le certificat peut-être émis :


si le certificat store *SYSTEM, n'existe pas, créez le


<- *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

si vous souhaitez émettre vos propres certificats, il vous faut être autorité de certification.


si c'est déjà le cas, ou si vous n'émettez pas de certificats, voyez la suite


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)


 

Pour créer un certificat, choisissez d'abord le "certificat store" *SYSTEM



puis choisissez "create certificate", Vous passez ensuite à la création de votre premier certificat :

 

serveur ou client


vous devez choisir soit

» commençons par un certificat émis localement





» voyons maintenant une demande de certificat à un organisme publique


ATTENTION à deux choses

  1. chaque demande de certificat est payante, unique et doit être faite pour UN serveur et par CE serveur
    (il faut donc être attentif)
  2. le common name doit être, dans le cas d'un serveur WEB , le nom du site utilisé par le client final.


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


 

Une fois le certificat connu de l'IBM i, choisissez l'application à certifier.



sur la liste suivante, faite votre choix :







<< Ici, Telnet

Confirmez le certificat


 


Pour le serveur WEB d'origine, vous deviez d'abord configurez votre serveur WEB comme indiqué ici

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 :


Pour le serveur APACHE (V5r1 et suivantes)

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

Listen 10.3.1.1:80
Listen 10.3.1.1:443
<VirtualHost 10.3.1.1:443>
ServerName www.volubis.intra
SSLEngine On
SSLAppName QIBM_HTTP_SERVER_WEBSERVER
SSLClientAuth None
</VirtualHost>

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>
ServerName www.volubis.intra
redirect 301 / https://www.volubis.intra/
</VirtualHost>
<VirtualHost 10.3.1.1:443>
ServerName www.volubis.intra
SSLEngine On
SSLAppName QIBM_HTTP_SERVER_WEBSERVER
SSLClientAuth None
</VirtualHost>

 

Si vous avez de vrais hôtes virtuel, basés sur le nom :

 

NamevirtualHost 10.3.1.1
<VirtualHost 10.3.1.1>
ServerName www.volubis.intra
.../...
</VirtualHost>
<VirtualHost 10.3.1.1>
ServerName www.autresite.intra
.../...
</VirtualHost>

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 :

  1. téléchargez le certificat créé sous DCM (celui qui vous identifie comme organisme certificateur) :

    lancez DCM et sélectez "Select a Certificate Store", optez pour local CA et rentrez le mot de passe, vous devez voir :



    Dans le menu de gauche, choisissez "Install local CA .."
    , puis choisissez "Installe certificate"



  2. Importez le certificat dans votre navigateur (ici IE 6)

    cliquez sur Certificats...

    et ici, choisissez importer , puis suivez l'assistant :

    et confirmez l'importation



    Sous Netscape/Mozilla ou Firefox (ici sous Linux)




    Si vous demandez VIEW



  3. Vérifiez que votre certificat a, dans la zone "common name", le nom de votre site


    si ce n'est pas le cas, vous verrez :

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


IBMi Access Client solution (pour Client Access Windows, voyez ici)

C'est intégré au produit, vérifiez simplement que vous avez assigné un certificat à toutes ces applications


Dans la configuration système, cochez SSL



Vérifiez, cela doit faire apparaître cette fenêtre




Aujourd'hui, Navigator for I utilise http (et non plus https) sur le port 2004
-> Si vous souhaitez conserver https et le port 2005, voyez ce document :
https://www.ibm.com/support/pages/how-enable-admin2-ibm-navigator-i-and-admin5-jobs-ibm-i-access-mobile-ssltls-communications-ibm-web-administration-i-console

Le certificat doit apparaître dans la liste des clés (Outils/gestion des clés)


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

  1. pour générer un CSR (Certificate Signing Request)
  2. pour importer le certificat dans le magasin

 

  Gestion des certificats assignés à une application :

 


Pour les applications Java (particulièrement les fonctions HTTPxxx de SYSTOOLS)

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

  1. ou vous voulez, et indiquez le par la variable d'environnement QIBM_JAVA_PROPERTIES_FILE (valable pour le JOB)
  2. dans la home directory de l'utilisateur (valable pour l'utilisateur)
  3. dans /QIBM/UserData/Java400 (valable pour tout le monde)

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