JMeter – Site avec authentification par certificat SSL

(mise à jour le 1er mai 2011)

JMeter permet de tester la charge de sites Web qui utilisent le SSL pour sécuriser le transport en utilisant le protocole « https », et également JMeter permet de tester la charge de sites Web qui utilisent l’authentification par certificats SSL.

Néanmoins, il y a un petit bémol, car l’enregistrement d’une navigation via le HTTP Proxy Server de JMeter permet d’enregistrer une session de navigation en HTTPS, mais ne permet pas de faire de l’authentification par certificat SSL.

Pour l’utilisation du proxy, vous pouvez vous référer à cet article.

Si vous utilisez le Serveur Proxy HTTP de JMeter à travers votre navigateur pour aller sur un site demandant une authentification par certificat SSL, vous aurez l’erreur « 501 Method not implemented ». En effet la négociation de certificat SSL n’est pas possible dans JMeter lors de l’enregistrement d’une session de navigation.

Erreur 501, méthode non implémentée

Une alternative possible reste de désactiver temporairement l’authentification par certificat SSL sur le site web, si vous en avez la possibilité, puis de faire l’enregistrement de la session avec JMeter. Pour le test de charge ensuite, l’authentification par certificat SSL sera réactivée.

Sinon, et bien, il vous reste à mettre en place vous même les requêtes HTTPS de manière manuelle. Voici un exemple de requête HTTPS.

Configuration HTTP Request Jmeter

Après avoir ‘jmeterisé’ votre scénario fonctionnel, et après avoir activé l’authentification SSL si vous l’aviez désactivée, vous pouvez faire un premier test de vérification.

Le résultat via un « View Results Tree » donnera une erreur « Non HTTP response code: javax.net.ssl.SSLHandshakeException » car l’authentification SSL n’aura pas fonctionné.

erreur « Non HTTP response code: javax.net.ssl.SSLHandshakeException »

Les données de réponse sont « javax.net.ssl.SSLHandshakeException: Received fatel alert: handshake_failure »

javax.net.ssl.SSLHandshakeException: Received fatel alert: handshake_failure

Pour permettre à JMeter de faire l’authentification par certificat SSL, il faut utiliser le menu Options > SSL Manager. Ce dernier permet d’ajouter un fichier de certificat SSL client pour l’authentification.

SSL Manager

On sélectionne le fichier PKCS (généré depuis le gestionnaire SSL du serveur Web – par exemple OpenSSL).

On sélectionne le fichier PKCS

Ensuite, on est prêt à faire un nouveau test de tir avec authentification par certificat SSL. Après avoir lancé le tir (Ctrl+R), JMeter nous demande de saisir le mot de passe du KeyStore (coffre de clés). Donc il faut saisir le mot de passe du fichier PKCS#12 (qui a été définit lors de la génération du fichier .p12).

On saisie le KeyStore Password

Et hop, maintenant on peut voir la page protégée par certificat SSL, car l’authentification s’est bien passée.

Résultat

En résumé, rien de bien méchant pour tester un site web en HTTPS avec authentification par certificat SSL.

Merci JMeter.

./

Flattr this!

5 commentaires

  1. Delannoy dit :

    Bonjour,

    Je me permet de vous posez une question concernant JMeter, ou le test de charge en général. Savez-vous comment peut-on établir une connexion HTTPS, avec pour chaque « thread », un certificat client SSL différent ? Je crois comprendre au vu de ce que j’ai lu sur Internet que ce n’est pas possible avec JMeter. Pour l’instant, je peux sans problème lancer 100 « thread » avec JMeter mais en utilisant le même certificat.

    Avez-vous quelques précisions, idées ?

    Merci

    Grégory Delannoy

  2. Milamber dit :

    Bonjour,

    A ma connaissance ce n’est possible en effet (une seul JVM = un seul certificat). Y a t’il une raison particulière à faire un tir de charges des certificats différents ? puisque dans tous les cas, la négociation ssl sera la même, même si le certificat ne change pas.

    A+
    Milamber

  3. Chrime dit :

    Bonjour,

    Je reviens sur cet ancien post de Delannoy.
    Pourquoi faire un tir de charges avec des certificats différents ? Simplement, un pour simuler « concrètement » plusieurs utilisateurs qui auraient des profils et droits différents sur un portail mais surtout que dans certaines applis web tu n’as pas le choix et tu ne peux faire qu’un login et des actions avec une et une seule connexion pour cet utilisateur.

    J’ai essayé avec un certificat d’un utilisateur précis, de le lancer 100 fois avec un délai de 2 sec, le 1er login et les qqs 1eres actions passent mais toutes les autres actions sortent en erreur systématiquement.

    La version 2.6 apparemment offre cette possibilité de faire un test de charge simulant plusieurs utilisateurs avec chacun leur certificats sauf que les explications de la doc Apache sont pour le moins très légère et je n’ai trouvé aucune explication sur l’utilisation de ce « Keystore Configuration » dans les divers forums et posts existants sur le net !!

    Est ce que vous avez étudié la question de plus près ?

  4. Chrime dit :

    De ce que je comprendais de prime abord, c’est que dans le fichier system.properties de JMeter on positionne le paramètre « javax.net.ssl.keyStore » au chemin où se trouvent les certificats.

    Puis dans le plan de test on défini un composant Keystore Configuration et les indexs correspondent juste à l’ordre des certificats dans ce répertoire !!!

    Du coup il faudrait faire correspondre les indices avec le nombre de threads (utilisateurs) du test dans le groupe d’unités ???? (ex si je mets indice start 0 et indice end à 2 je peux mettre 3 utilisateurs pour mon test. Et surtout il faut qu’il y ait au moins 3 certificats dans le répertoire de mon keystore !!!