Sécuriser un proxy service OSB, Part 2 – Configurer le two-way SSL sur Weblogic Server

Dans un premier article, nous avons présenté les axes de de sécurisation des services Web avec Oracle Service Bus.
Pour cette seconde partie, nous nous attaquerons à la sécurisation de la couche transport en utilisant Oracle Weblogic Server. Afin de sécuriser l’échange entre 2 serveurs nous mettrons en place le « two-way SSL ». Ce mode de communication est appelé ainsi car il nécessite des certificats de part et d’autre pour valider l’identité de l’appelant (un certificat serveur et une clé client).
Les étapes de configurations sont les suivantes :

  • Création des certificats Client
  • Configuration des certificats sur le client
  • Création des certificats Serveur
  • Configuration des certificats sur Weblogic

Attaquons le sujet !

Création d’un client Java (ici SOAP UI)

Configuration des certificats
Utilisation de l’outil « keytool » de la JVM installée avec SOAP UI.
Création du répertoire sécurisé :

[adrien@easyadrien soapUI-3.5.1]$ mkdir cert
[adrien@easyadrien soapUI-3.5.1]$ chmod -R 700 cert
[adrien@easyadrien soapUI-3.5.1]$ cd cert

Création du keystore et de la clé privée :

[adrien@easyadrien cert]$ ../jre/bin/keytool -genkey -alias adrienpc -keyalg RSA -validity 3650 -dname "CN=Adrien Adrien,OU=UDP,O=Easyteam,L=Lille,ST=France,C=FR" -keystore soapui.jks -storetype JKS -storepass soapui -keypass easyteam
[adrien@easyadrien cert]$ ../jre/bin/keytool -list -v -keystore soapui.jks
Tapez le mot de passe du Keystore :
Type Keystore : JKS
Fournisseur Keystore : SUN
Votre Keystore contient 1 entrée(s)
Nom d'alias : adrienpc
Date de création : 22 mars 2011
Type dentrée : {0}
Longueur de chaîne du certificat : 1
Certificat[1]:
Propriétaire : CN=Adrien Adrien, OU=UDP, O=Easyteam, L=Lille, ST=France, C=FR
Émetteur : CN=Adrien Adrien, OU=UDP, O=Easyteam, L=Lille, ST=France, C=FR
Numéro de série : 4d886eb2
Valide du : Tue Mar 22 10:41:06 CET 2011 au : Fri Mar 19 10:41:06 CET 2021
Empreintes du certificat :
MD5 :  D4:26:AA:01:0C:8F:A1:6C:B2:B3:FA:C1:6D:06:9D:CD
SHA1 : B1:D2:73:49:F5:43:1E:1F:A7:97:6D:D7:E5:47:12:06:78:88:FF:31
Nom de lalgorithme de signature : {7}
Version : {8}

Création du certificat d’authentification avec son keystore PKCS12 :

[adrien@easyadrien cert]$ ../jre/bin/keytool -genkey -alias adrienpc -keyalg RSA -validity 3650 -dname "CN=Adrien Adrien,OU=UDP,O=Easyteam,L=Lille,ST=France,C=FR" -keystore soapui.p12 -storetype PKCS12 -storepass soapui
[adrien@easyadrien cert]$ ../jre/bin/keytool -list -v -storetype PKCS12 -keystore soapui.p12
Tapez le mot de passe du Keystore :
Type Keystore : PKCS12
Fournisseur Keystore : SunJSSE
Votre Keystore contient 1 entrée(s)
Nom d'alias : adrienpc
Date de création : 22 mars 2011
Type dentrée : {0}
Longueur de chaîne du certificat : 1
Certificat[1]:
Propriétaire : CN=Adrien Adrien, OU=UDP, O=Easyteam, L=Lille, ST=France, C=FR
Émetteur : CN=Adrien Adrien, OU=UDP, O=Easyteam, L=Lille, ST=France, C=FR
Numéro de série : 4d88709c
Valide du : Tue Mar 22 10:49:16 CET 2011 au : Fri Mar 19 10:49:16 CET 2021
Empreintes du certificat :
MD5 :  7E:C1:AE:6B:72:51:2B:9D:17:E2:55:93:C1:A5:97:38
SHA1 : A7:17:81:1B:6D:F9:72:68:2F:0D:A9:09:B2:AA:8B:2D:34:F8:30:19
Nom de lalgorithme de signature : {7}
Version : {8}

Export du certificat Public :

[adrien@easyadrien cert]$ ../jre/bin/keytool -export -alias adrienpc -keystore soapui.jks -storetype JKS -storepass soapui -keypass easyteam -file adrienpc.cer
Certificat enregistré dans le fichier <adrienpc.cer>

Export du certificat d’authentification :

[adrien@easyadrien cert]$ ../jre/bin/keytool -export -alias adrienpc -keystore soapui.p12 -storetype PKCS12 -storepass soapui -file adrienpc.p12.cer
Certificat enregistré dans le fichier <adrienpc.p12.cer>

Vérification des fichiers générés :

[adrien@easyadrien cert]$ ll
total 16
-rw-r--r-- 1 adrien users  593 22 mars  10:53 adrienpc.cer
-rw-r--r-- 1 adrien users  593 22 mars  10:54 adrienpc.p12.cer
-rw-r--r-- 1 adrien users 1363 22 mars  10:47 soapui.jks
-rw-r--r-- 1 adrien users 1816 22 mars  10:49 soapui.p12

Configuration de SOAP UI


Configuration du keystore p12 pour authentification forte (password ici « soapui ») :

Création des certificats sur le serveur OSB

Utilisation de l’outil « keytool » de la JVM installée avec le serveur Weblogic.
Création du répertoire sécurisé :

[oracle@soa.lille.easyteam.fr ~]$ cd /soa/domains/d_dev_soa/
[oracle@soa.lille.easyteam.fr d_dev_soa]$ mkdir cert
[oracle@soa.lille.easyteam.fr d_dev_soa]$ chmod -R 700 cert
[oracle@soa.lille.easyteam.fr d_dev_soa]$ cd cert

Création de la clé privée et du keystore du serveur :

[oracle@soa.lille.easyteam.fr cert]$ /app/oracle/product/jrockit-jdk1.6.0_20-R28.1.0-4.0.1/bin/keytool -genkey -alias soa.lille.easyteam.fr -keyalg RSA -dname "CN=soa.lille.easyteam.fr,OU=UDP,O=Easyteam,L=Lille,S=France,C=FR" -keypass easyteam -storepass welcome1-keystore keystore.jks -storetype JKS -validity 3650
[oracle@soa.lille.easyteam.fr cert]$ /app/oracle/product/jrockit-jdk1.6.0_20-R28.1.0-4.0.1/bin/keytool -list -v -keystore keystore.jks
Enter keystore password: 
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
Alias name: soa.lille.easyteam.fr
Creation date: Mar 22, 2011
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=soa.lille.easyteam.fr, OU=UDP, O=Easyteam, L=Lille, ST=France, C=FR
Issuer: CN=soa.lille.easyteam.fr, OU=UDP, O=Easyteam, L=Lille, ST=France, C=FR
Serial number: 4d886d28
Valid from: Tue Mar 22 10:34:32 CET 2011 until: Fri Mar 19 10:34:32 CET 2021
Certificate fingerprints:
     MD5:  D0:A6:66:E0:DC:27:99:78:5A:5B:62:73:9E:1A:C1:B7
     SHA1: 43:BF:52:F5:D0:EC:CC:27:B0:44:EF:C4:04:E3:06:F1:2F:89:B4:26
     Signature algorithm name: SHA1withRSA
     Version: 3

Maintenant copier sur le serveur OSB le certificat issue du keystore PKCS12 (ici adrien.p12.cer).
Importation de la clé cliente pour l’authentification forte :

[oracle@soa.lille.easyteam.fr cert]$ /app/oracle/product/jrockit-jdk1.6.0_20-R28.1.0-4.0.1/bin/keytool -import -trustcacerts -alias adrienpc -file adrienpc.p12.cer -keystore keystore.jks -storepass welcome1 -storetype JKS
Owner: CN=Adrien Adrien, OU=UDP, O=Easyteam, L=Lille, ST=France, C=FR
Issuer: CN=Adrien Adrien, OU=UDP, O=Easyteam, L=Lille, ST=France, C=FR
Serial number: 4d88709c
Valid from: Tue Mar 22 10:49:16 CET 2011 until: Fri Mar 19 10:49:16 CET 2021
Certificate fingerprints:
     MD5:  7E:C1:AE:6B:72:51:2B:9D:17:E2:55:93:C1:A5:97:38
     SHA1: A7:17:81:1B:6D:F9:72:68:2F:0D:A9:09:B2:AA:8B:2D:34:F8:30:19
     Signature algorithm name: SHA1withRSA
     Version: 3
Trust this certificate? [no]:  yes
Certificate was added to keystore

Il est possible de séparer les certificats d’identification des certificats de chiffrement.
Copier sur le serveur OSB le certificat public de chiffrement (ici adrienpc.cer).
Importer ce certificat dans le keystore de l’OSB :

[oracle@soa.lille.easyteam.fr cert]$ /app/oracle/product/jrockit-jdk1.6.0_20-R28.1.0-4.0.1/bin/keytool -import -trustcacerts -alias apache -file adrienpc.cer -keystore keystore.jks -storepass welcome1 -storetype JKS
Owner: CN=Adrien Adrien, OU=UDP, O=Easyteam, L=Lille, ST=France, C=FR
Issuer: CN=Adrien Adrien, O=Easyteam, L=Lille, ST=France, C=FR
Serial number: b182100a672cd058
Valid from: Tue Mar 22 12:12:06 CET 2011 until: Fri Mar 19 12:12:06 CET 2021
Certificate fingerprints:
     MD5:  9C:4B:F1:D3:C1:C9:86:3D:D0:C1:F2:8F:76:72:CE:B2
     SHA1: 1E:41:93:EE:9E:4D:E4:0D:68:2B:B4:80:81:7C:44:DC:E7:BD:04:B1
     Signature algorithm name: SHA1withRSA
     Version: 3
Extensions:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: EF 58 EF FF F7 E1 0C 94   15 80 90 13 73 7C 16 0B  .X..........s...
0010: A8 B7 D8 49                                        ...I
]
]
#2: ObjectId: 2.5.29.19 Criticality=false
BasicConstraints:[
  CA:true
  PathLen:2147483647
]
#3: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: EF 58 EF FF F7 E1 0C 94   15 80 90 13 73 7C 16 0B  .X..........s...
0010: A8 B7 D8 49                                        ...I
]
[CN=dmzweb01, OU=UDP, O=Easyteam, L=Lille, ST=France, C=FR]
SerialNumber: [    b182100a 672cd058]
]
Trust this certificate? [no]:  yes
Certificate was added to keystore

Configuration des certificats sur le serveur OSB

Après avoir vérifié que le port SSL était bien activé sur le « Managed Server » OSB, éditer sa configuration :

Configurer le keystore créé précédemment :

Location : /soa/domains/d_dev_soa/cert/keystore.jks
Type : JKS
Passphrase : welcome1

Activer les changements puis redémarrer le managed server OSB.

Activer la sécurisation d’un service sur la console OSB

Editer la configuration « HTTP Transport » du Proxy Service:

Activer le HTTPS :

Activer la sécurisation d’un service sur l’IDE Eclipse

Activer le HTTPS dans l’onget « HTTP Transport »:

Conclusion

Grâce à cet article, vous avez appris à sécuriser un Proxy Service en utilisant une authentification forte par « two-way SSL ».
Dans la prochaine partie, il sera question d’ajouter un Reverse Proxy basé sur Apache Web Server entre le client et le serveur Weblogic. Ce procédé permettra notamment d’effectuer un rebond dans une DMZ pour plus de sécurité.