03 abril 2012

Configuración SSL de Tomcat

Hace unos días me toco configurar un servidor tomcat para que su conector HTTPS no permitiese cifrados débiles de SSL, debido al elevado número de vulnerabilidades que se conocen. También es uno de los requisitos de normas como PCI-DSS o FIPS. 

Pese a que incluso la propia documentación de Tomcat para SSL advierte que utiliza los ciphers por defecto de la JVM y que estos no son lo más acertados, no han hecho nada para cambiarlo.

Para solucionar el problema, basta con editar el archivo $CATALINA_HOME/conf/server.xml y modificar el conector añadiendo el parámetro SSLCiphersuite de la siguiente forma:

<Connector  clientauth="false" maxthreads="200" 
port="443" scheme="https" secure="true" 
sslcertificatefile="/home/tomcat/certs/cert.crt" 
sslcertificatekeyfile="/home/tomcat/certs/cert.key"
sslciphersuite="ALL:!ADH:!SSLv2:!EXPORT40:!EXP:!LOW:!NULL" 
sslenabled="true" sslprotocol="TLS"  />

Esta directriz, con nomenclatura de OpenSSL, es exactamente igual que la se debe añadir a un Apache httpd, solo que localizada en otro fichero de configuración.

Si somos algo más paranóicos y además se quiere cumplir con FIPS-140, además de lo anterior, hay que prohibir el uso de MD5 y RC4:

SSLCipherSuite ALL:!EXP:!NULL:!ADH:!LOW:!SSLv2:!MD5:!RC4

Una vez modificado y reiniciado el servicio, se puede utilizar la herramienta online de Qualys SSL Labs o sslscan, para comprobar el resultado final.

3 comments :

Juan David Gutierrez Reyes dijo...

Esta directiva solo funciona si estas usando el conector nativo apr: Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol". De lo contrario tendras que modificar esto directamente en las politicas de seguridad del JDK ya que estarás usando KeyStore como repositorio de los certificados.

Moxilo dijo...

Buena entrada, pero te has dejado cosas importantes como forzar siempre el uso de SSL cuando se conecten a protocolos no cifrados, empleo de curva elíptica, algoritmos de clave simétrica mayores de 128 bits o forzar el uso únicamente de tuplas seguras: algoritmo simétrico y hash de compendio adecuados. Tomcat permite muchas cosas que otros entornos no permiten...

Saludos.  

minsqui dijo...

Uy! No había visto este post en su día, y ahora googleando me lo he encontrado y que bien me ha venido! :)