Intive-FDV Blog

Deshabilitar SSL en JMeter

Muchas veces nos encontramos con que queremos hacer unas pruebas de stress y necesitamos correr nuestros scripts de JMeter en varios servidores a la vez. En varias oportunidades, también, nos pasa que no tenemos infraestructura dedicada para correr estos tests. Uno de los problemas de no contar con esa infraestructura es que no podemos mantener configuraciones permanentes, ni saber de antemano las IP de los servers o incluso tener instalado el propio JMeter.

Una vez me encontré con este dilema. Necesitaba generar mucha carga. Tenía unos tests que desde un solo server podían servirme para generar hasta 20.000 requests por minuto cuando yo necesitaba 100.000. Con JMeter hacer esto es relativamente fácil. Distribuyo mis tests en 5 servidores y listo…con eso debería llegar al número deseado.

Aunque usar JMeter en modo distribuido es bastante directo, hubo algo que me frenó un poco. Para correr los tests en modo distribuido hay tres requisitos básicos: tener la misma versión de JMeter en todos los servidores, tener la misma versión de Java en todos los servidores y tener un keystore válido para permitir RMI (RMI: Remote Method Invocation) sobre SSL (Security Sockets Layer). Este último punto no lo cumplía.

Arreglar esto parece bastante sencillo si se sigue la documentación. JMeter tiene un generador para el archivo .jks. Se hace en un servidor y se distribuye entre todos los JMeter que hay funcionando y debería salir andando. En teoría. Cuando yo lo hice no me funcionó, tal vez no estaba siguiendo bien todos los pasos, o tal vez había otra cosa. A su vez, como los tests los estaba corriendo en máquinas “efímeras” en Amazon debía volver a hacer esto cada vez que las levantaba…Podría haber generado una AMI (Imagen de Máquina de Amazon) con todo hecho, sí, pero en su momento no se me ocurrió 😉

Una opción para bypasear esto es deshabilitar el chequeo SSL para RMI, algo que es bastante sencillo. Probablemente no sea la mejor idea para todos los casos, pero estando en un ambiente controlado (como era este caso donde todos los servidores que corrían los tests estaban dentro de la misma red de AWS) puede ser una buena y rápida idea.

Hay dos formas de deshabilitar SSL en JMeter, la primera es agregar una configuración de arranque de JMeter. Simplemente se busca el archivo jmeter.properties y se agrega la línea server.rmi.ssl.disable=true. Esto lo hacemos tanto en el servidor que controla los tests como en los nodos donde se ejecutan. Es fácil y bastante sencillo. Pero en mi caso lo hice de otra manera.

Básicamente lo que hice fue reescribir la property de chequeo SSL desde la línea de comandos. JMeter nos permite reescribir las properties de esos archivos de configuración en el momento que se arranca. Para hacerlo solo se tiene que agregar el comando -J<PropertyQueEstamosPisando>. En este caso, al momento de levantar los nodos en modo server me quedó un comando así: jmeter -s -Jserver.rmi.ssl.disable=true.

Es necesario evitar el chequeo SSL también en en el servidor maestro. Se sigue la misma lógica. Por ejemplo, puede quedar un comando parecido a este: jmeter -n -t jmeter.jmx -Rlocalhost -Jserver.rmi.ssl.disable=true

Personalmente, me costó un poco entender el porqué de ciertas cosas y la documentación de JMeter al principio me pareció algo confusa. Pero, descubrí que vale la pena el esfuerzo ya que es una herramienta muy poderosa…¡Espero que esto haya sido de ayuda!

Fernando Lescano

Es uno de nuestros líderes técnicos y desarrollador full stack de intive – FDV desde marzo de 2015. En la empresa trabaja con tecnologías como Javascript (NodeJS, AngularJS, Mongodb, Jquery, etc.), Python (Django), Java y PHP e integra la brigada Frontend. Se define como “apasionado del desarrollo de software, pero con muchos otros intereses”. Desde diciembre de 2015 se ocupa del desarrollo y mantenimiento en Java y de nuevos componentes en JavaScript (AngularJS). Es Técnico Universitario en desarrollo de software y tecnologías de la información, graduado de la Universidad Provincial de Ezeiza.

2 comentarios

  • JMeeter es genial, pero si necesitas hacer tests más “custom”, y te das maña con Python o NodeJs async/await, lo mejor para mi es Molotov https://molotov.readthedocs.io/en/stable/ , con un script sencillo te permite probar tus apps al límite, especialmente APIs donde necesitás que cada request sea único ej. un POST con un JSON con valores distintos…, muy buena tool.

    • Sin dudas hay otras opciones.

      En la empresa hay equipos que usan junit para hacer test automatizados por ejemplo. Tambien hay gente usando postman, que en las últimas versiones agrego un montón de opciones interesantes.

      En este caso Jmeter es lo que nos permitió más velocidad porque no necesitamos mucha lógica. Solo necesitábamos pegarle duro a unos endpoints y medir el tiempo de respuesta.

      Saludos