Cómo configurar HTTPS en Tomcat 7

Lo primero es comprar un dominio y hacer que apunte al servidor (no indicados los pasos aquí).

Crear el certificado con Certbot.

Puede que certbot de el error ImportError: No module named cryptography.hazmat.bindings.openssl.binding.

Copiamos el .pfx generado a la carpeta de Tomcat y le damos permisos para que Tomcat lo pueda leer:

Configuramos Tomcat para que use el certificado SSL, en /etc/tomcat7/server.xml

Configuramos el sistema para que las peticiones a los puertos 80 y 443 los sirva el servidor escuchando en los puertos 8080 y8443. Yo lo pongo en /etc/init.d/tomcat7 en los comandos ‘start’ y ‘stop’:

Configurar Tomcat para que sólo acepte conexiones HTTPS en /etc/tomcat7/web.xml . Añadir dentro del contenido del tag <web-app> :

Configurar el conector HTTP en  /etc/tomcat7/server.xml  para que redireccione al puerto 443 (no al 8443), de manera que todas las peticiones HTTP serán redireccionadas a HTTPS:

Resumen de la creación del certificado

Este es el script para crear el certificado:

Configurar la renovación automática del certificado

Añadimos la siguiente línea a /etc/crontab  para que se ejecute cada 2 meses (dado que el certificado dura 3):

O también se puede ejecutar a mano como root  cuando nos llegue el correo recordatorio de que el certificado va a expirar:

 

¿Usas Tomcat? No olvides las librerías nativas

Así de fácil:

y ya de paso, tampoco olvides añadir las dependencias de logging slf4j a la aplicación, que Spring lo agradecerá :) :

 

Qué hacer para que en Tomcat 6 funcionen CGI’s de ficheros ejecutables en Linux

Instalé el Tomcat 6 y no funcionaban los CGI’s así que no podía probar el juego de damas de Jacobo, programado en C. Para hacer que Tomcat 6 ejecute ficheros (que no sean Perl, que es la configuración por defecto), hay que hacer:

  • Modificar $CATALINA_HOME/conf/context.xml y en el tag <Context> poner <Context privileged=”true”> para que se pueda cargar la clase encargada de ejecutar los CGI’s, que ahora no es un .jar independiente, sino que viene embebido en catalina.jar (parece ser… es lo que he leído).
  • Modificar $CATALINA_HOME/conf/web.xml :
    • Descomentar <servlet>…</servlet> relacionado con el cgi; es el tag contenedor de <servlet-name>cgi</servlet-name>
    • Fijarse en el valor relacionado con <param-name>cgiPathPrefix</param-name> , en mi caso era WEB-INF/cgi , pero lo cambié a WEB-INF/cgi-bin porque me gusta más. Es el directorio donde pondremos los ejecutables, concretamente, para mí: $CATALINA_HOME/webapps/ROOT/WEB-INF/cgi-bin
    • Añadir el parámetro:
      <init-param>
      <param-name>executable</param-name>
      <param-value></param-value>
      </init-param>

      De esta manera, conseguiremos que se ejecute el ejecutable. Si se pone bash o sh a mí no me funciona, y con esto sí… tengo mis teorías, pero dan igual ;)
    • Descomentar el bloque del mapeado del servlet relacionado con los CGI’s:
      <servlet-mapping>
      <servlet-name>cgi</servlet-name>
      <url-pattern>/cgi-bin/*</url-pattern>
      </servlet-mapping>
  • Meter los CGI’s en $CATALINA_HOME/webapps/ROOT/WEB-INF/cgi (o cgi-bin si se cambia el nombre, como yo).
  • Recargar el Tomcat

Tras esto, se ejecutarán los ficheros cuando se acceda a la dirección http://localhost:8080/cgi/ejecutable (o el puerto que esté establecido)