
SAS Enterprise Miner s’appuie sur Java Web Start. Java Web Start permet de télécharger et d'exécuter des applications Java à partir du Web. Avec SAS Enterprise Miner, à partir d'un navigateur Web, en cliquant sur un lien disponible sur la page
SASEnterpriseMinerJWS, le navigateur Web lance Java Web Start, qui télécharge, met en cache et exécute l'application :

Dans le cas où les communications entre l’application java SAS Enterprise Miner et
votre serveur SAS sont chiffrés via tls/ssl (https), il peut être nécessaire d’ajouter les certificats de l’autorité de certification (CA) du serveur SAS dans la JVM exécutant l’application.
Un peu de théorie
Avant de vous lancer dans la configuration, je vous propose un petit rappel du fonctionnement des certificats et des autorités de certification. Je le répète souvent sur mon blog mais une bonne compréhension des acteurs et du fonctionnement est la clé de la réussite !
Les certificats sont utilisés pour authentifier un processus serveur ou un utilisateur. Une
autorité de certification (
CA) est une autorité d'un réseau qui émet et gère des informations d'identification de sécurité et des clés publiques pour le chiffrement des messages. Dans le cadre d'une infrastructure à clé publique (
PKI), une autorité de certification vérifie auprès d'un organisme d'enregistrement les informations fournies par le demandeur d'un certificat numérique.
Si l'autorité d'enregistrement vérifie les informations du demandeur, l'AC peut alors délivrer un certificat. Les certificats numériques sont utilisés dans un système de sécurité de réseau pour garantir que les deux parties échangent des informations sont vraiment qui ils prétendent être. A noter également, selon la configuration du système de sécurité d'un réseau, le certificat peut inclure la clé publique et le nom de son propriétaire, la date d'expiration du certificat ou d'autres informations
L'authentification des entités se fait par trois types de certificats :
- Signé par un tiers (Third-party-signed) . Vous accédez à une autorité de certification commerciale tierce, telle que VeriSign, Symantec ou Comodoto, et achetez un certificat.
- Site-signed. Vous demandez à la direction informatique de votre site pour obtenir un certificat.
- Auto-signé (self-signed). Vous êtes votre propre autorité de certification.
Comment fonctionne la validation du certificat ?

Prenons l'exemple d'un serveur SAS fonctionnant en https, c'est à dire que le serveur web SAS utilise un certificat signé par une autorité de certification (si vous ne savez pas ce qu'est une autorité de certification, lisez le chapitre au dessus).
Lorsque vous accédez, depuis votre navigateur à ce serveur SAS en https, une vérification du certificat serveur est effectuée, c'est à dire que
le navigateur regarde qui a "signé" le certificat du serveur (par exemple Geotrust) puis regarde dans son magasin de certificat valide si Geotrust est bien une autorité de confiance. Un magasin (keystore) contient la clef privée et tout certificat nécessaire pour compléter une chaîne de confiance et établir la valeur de confiance du certificat primaire. Si le navigateur trouve Geotrust dans son magasin, cela signifie qu'il peut faire confiance au serveur (puisque c'est Geotrust qui l'a signé et que le navigateur fait confiance à Geotrust) et chiffrer les communications. Par contre, si le navigateur NE trouve PAS, l'autorité de certification ayant signé le certificat serveur, il NE peut PAS faire confiance à ce serveur et l'indique à l'utilisateur via un message d'avertissement. Les navigateurs (ou Java qui nous intéresse dans cet article) utilise un magasin confiance avec la majorité des autorités certification (Liste
Mozilla).
Aussi, si le serveur que vous tentez d’accéder est signé/identifié par un autorité (Third-party-signed) pas de problème. Il y a de grande chance que l'autorité de confiance soit présente dans le magasin de certificat utilisé par le navigateur. Par contre avec un Site-signed ou un self-signed, aucune chance : vous devez l'ajouter à la main !
Le fonctionnement est le même avec SAS Enterprise Miner puisque cette application utilise Java pour se connecter au serveur SAS. Il faut donc vous assurer que l'autorité de certification ayant signé le certificat du serveur est bien présente dans le magasin de certificat de JAVA. Simple, non ?
Message d'erreur
Si Java ne connait pas l'autorité de certification ayant "signé" le serveur SAS, vous vous trouvez dans la situation suivante :
Enterprise Miner : Le certificat n’est pas valide et ne permet pas de vérifier l’identité de ce site Web.

Si vous avez lu mes explications, le message prend tous son sens et donne bien la cause du problème. Le certificat utilisé afin d'identifier le site Web n'est pas sécurisé : l'autorité de certification ayant émis ce certificat n'est pas reconnue.
Comprendre : Java n'a pas trouvé l'autorité de certification ayant signé (ou identifié pour reprendre le message d'erreur) le serveur SAS. java a parcouru son magasin de certificat (keystore) mais ne l'a pas trouvé.
Déterminer l'autorité de certification du serveur SAS
Pour déterminer l'autorité de certification du serveur SAS, il suffit de cliquer sur "Visualiser les détails de certificat" dans la fenêtre d'erreur :

Ce qui donne :

Nous constatons que le certificat de notre serveur SAS est identifié par l'autorité
RapidSSL SHA256. Cette autorité est elle-même certifié par
Geotrust. Nous devons nous assurer que l'autorité
RapidSSL SHA256 est présente dans le magasin de certificat du JAVA exécutant SAS Enterprise miner. D'un autre côté, ce n'est pas la peine de vérifier puisque une erreur se produit.... De la même façon, si vous utiliser un certificat auto-signé ou signé par votre enterprise, même scénario : il y a aucune chance pour le trouver dans le keystore java. Rendez-vous donc au chapitre suivant, ajouter le certificat de l'autorité dans le keystore java.
Ajouter le certificat de l'autorité dans le keystore Java
Avant toute action, vous devez récupérer le certificat à importer :
- Si il s'agit d'un certificat auto-signé, vous l'avez puisqu'il s'agit de celui installé sur le serveur SAS (et qui s'auto certifie).
- Si il s'agit d'un certificat diffusé par votre entreprise, vous pouvez le demander à votre équipe informatique ou en le récupérant dans votre magasin de certificat Windows. Il y a en effet de forte chance pour qu'il s'y trouve (puisque lorsque vous accéder à votre serveur SAS depuis un navigateur cela fonctionne).
- Si il s'agit d'un certificat validé par une autorité de certification et que lorsque vous accéder à votre serveur SAS depuis un navigateur, vous ne rencontrez aucun problème cela peut-être du à l'absence du certificat de l'autorité ou d'un sous-certificat de cet autorité, dans le magasin.
L'ajout dans le magasin de certificat java se fait un une seule et unique ligne de commande, via l'outil de gestion de certificat,
Keytool. Cet outil permet aux utilisateurs de gérer les certificats. Le Java
Keytool range les clefs et certificats dans ce que l'ont appelle un magasin de certificat (j'ai donné des explications plus haut, pour ceux qui seraient arriver directement dans ce chapitre)
À l'invite de commandes, exécutez la commande suivante
|
"C:\Program Files\Java\jre1.8.0_121\bin\keytool.exe" -keystore "C:\Program Files\Java\jre1.8.0_121\lib\security\<strong>cacerts</strong>" -<strong>importcert</strong> -alias RapidSSL_SHA256_CA -file "C:\TEMP\ssl\RapidSSL_SHA256_CA.crt" |
Vous êtes invité à entrer le mot de passe du magasin. Le mot de passe par défaut est
changeit.
L'outil vous demande de confirmer l'ajout et indique un message si tout se passe bien :

Notez que chaque certificat dans un Keystore Java est associé avec un
alias unique.
Maintenant, nous pouvons vérifier l'import avec la commande suivante :
|
"C:\Program Files\Java\jre1.8.0_121\bin\keytool.exe" <strong>-list</strong> -keystore "C:\Program Files\Java\jre1.8.0_121\lib\security\cacerts" |
Vous pouvez valider la bonne prise en compte de votre certificat en comparant les empreintes numériques :
It Works !
Attention toutefois, avec certaines versions de Java 8, des problèmes peuvent continuer à exister (
Failed to validate certificate. The application will not be executed. ) Vous pouvez consulter la note : suivante
http://support.sas.com/kb/57/635.html
Pour aller plus loin
La sécurité des données est sujet qui me tiens à cœur, les articles sont donc nombreux sur mon blog. Je vous encourage à lire les suivants :
Quelques messages d'erreur
the trustAnchors parameter must be non-empty indique que votre magasin de certificat java est vide ou n'existe pas.
Could not access HTTP invoker remote service. javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: Certificate has been denied indique que SAS Enteprise Miner refuse le certificat du serveur SAS car il n'est pas parvenu à retrouver l'autorité de certification dans son magasin.