Como configurar Alfresco con SSL usando Let’s Encrypt

por / martes, 05 enero 2016 / Publicado enBlog
Cómo desarrollar en Alfresco 5
keensoft "Cuando la tecnología se hace imprescindible" en el Heraldo de Aragón

En este artículo se describe una configuración segura para Alfresco Community 5 utilizando un certificado SSL generado por la nueva CA Let’s Encrypt asumiendo el siguiente escenario de partida:

  • Servidor con acceso a Internet y accesible desde Internet
  • Sistema operativo CentOS 6.7 con instalación minimal
  • Instalación por defecto de Alfresco Community 5 en /opt/alfresco

alfresco-ssl-keensoft

1. Instalación de Apache HTTPd

Se instala el servidor web por defecto desde el repositorio estándar.

# yum install httpd
# chkconfig httpd on

2. Instalación del conector nativo APR para Apache Tomcat

De acuerdo a algunos estudios comparativos, el conector más eficiente para utilizar SSL es el propio conector nativo APR suministrado con la instalación de Apache Tomcat. Se suministran las fuentes del conector, por lo que será necesario compilarlo como paso previo a su uso.


# yum install openssl-devel
# yum groupinstall "Development Tools"

# cd /opt/alfresco/tomcat/bin
# tar -zxvf tomcat-native.tar.gz
# cd tomcat-native-1.1.32-src/jni/native
# ./configure --with-apr=/usr/local/apr --with-java-home=/opt/jdk1.8.0_66
# make
# make install

Una vez que el conector está disponible (la ubicación por defecto es /usr/local/apr/lib), se incluye como nueva librería JNI en la configuración de Apache Tomcat.


# vi /opt/alfresco/tomcat/bin/catalina.sh
++ CATALINA_OPTS="$CATALINA_OPTS -Djava.library.path=/usr/local/apr/lib"

Para verificar que hemos realizado los pasos correctamente, basta con consultar el fichero de log de arranque de Tomcat, en el que se indica el uso de este conector.


# cat /opt/alfresco/tomcat/logs/catalina.out
INFO: Loaded APR based Apache Tomcat Native library 1.1.32 using APR version 1.5.2.

3. Generación de los certificados SSL con Let’s Encrypt

Let’s Encrypt provee certificados SSL seguros y confiables de manera gratuita. Una vez configurado, los usuarios recibirán un candado verde en sus navegadores sin operaciones adicionales. Es importante notar que estos certificados no pueden ser utilizados en Intranets, ya que el mecanismo de verificación de identidad requiere conexión a Internet en ambas direcciones: desde el servidor a Let’s Encrypt y desde Let’s Encrypt al servidor.

Una de las dependencias del software de Let’s Encrypt es Python 2.7, que no está disponible en los repositorios públicos de CentOS 6. Por este motivo, deberemos realizar la instalación manual del software y el reemplazo de valores para el comando python en el script de Let’s Encrypt.


# wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
# rpm -Uvh epel-release-latest-6.noarch.rpm
# wget https://centos6.iuscommunity.org/ius-release.rpm
# rpm -Uvh ius-release.rpm
# yum -y install python27 python27-devel python27-pip python27-setuptools python27-tools python27-virtualenv --enablerepo=ius

# yum install git
# git clone https://github.com/letsencrypt/letsencrypt
# cd letsencrypt
# sed -i "s|--python python2|--python python2.7|" letsencrypt-auto

Una vez preparado el software, basta con dar de alta la cuenta de usuario y realizar la generación manual de los certificados. Let’s Encrypt generará los certificados SSL necesarios en la ruta /etc/letsencrypt/live/hostname.


# ./letsencrypt-auto --verbose
# ./letsencrypt-auto certonly --standalone -d alfresco.keensoft.es

# ls /etc/letsencrypt/live/alfresco.keensoft.es/cert.pem
# ls /etc/letsencrypt/live/alfresco.keensoft.es/privkey.pem
# ls /etc/letsencrypt/live/alfresco.keensoft.es/fullchain.pem

4. Instalación del módulo JK para Apache HTTPd

La manera más efectiva de redirigir peticiones desde Apache HTTPd a Apache Tomcat es la utilización del protocolo AJP (habitualmente por el puerto 8009), que requiere la instalación y configuración del módulo JK en el servidor web. Desde nuestra propia experiencia, este módulo es más adecuado para Alfresco que otras alternativas más generalistas como mod_proxy.

Este conector también se provee a través de su código fuente, por lo que es necesario compilarlo antes de su utilización.


# yum install httpd-devel

# wget http://ftp.cixug.es/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.41-src.tar.gz
# tar -xvzf tomcat-connectors-1.2.41-src.tar.gz
# cd tomcat-connectors-1.2.41-src/native
# ./configure --with-apxs=/usr/sbin/apxs
# make
# make install

Una vez compilado, se realiza la configuración basada en workers. A continuación se describen los archivos necesarios para levantar un único worker nombrado como app1Worker.


# vi /etc/httpd/conf.d/mod_jk.conf
LoadModule jk_module "/etc/httpd/modules/mod_jk.so"
JkWorkersFile /etc/httpd/conf/workers.properties
JkShmFile     /var/run/httpd/mod_jk.shm
JkLogFile     /var/log/httpd/mod_jk.log
JkLogLevel    info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

# vi /etc/httpd/conf/workers.properties
workers.apache_log=/var/log/httpd
worker.list=app1Worker
worker.stat1.type=status

worker.app1Worker.type=ajp13
worker.app1Worker.host=alfresco.keensoft.es
worker.app1Worker.port=8009

Como último paso, se realiza la configuración de las redirecciones para que cualquier petición al puerto 80 sea redirigida al puerto 443 (en el que se incluirán los certificados generados con Let’s Encrypt).


# vi /etc/httpd/conf.d/alfresco.conf
<VirtualHost *:80>
ServerName alfresco.keensoft.es
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/(.*) https://alfresco.keensoft.es/$1 [R=301,L]
</VirtualHost>

Listen 443
<VirtualHost *:443>
ServerName alfresco.keensoft.es

JkMount /* app1Worker

SSLEngine           on
SSLVerifyClient     none

SSLCertificateFile    /etc/letsencrypt/live/alfresco.keensoft.es/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/alfresco.keensoft.es/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/alfresco.keensoft.es/fullchain.pem

SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown \
  downgrade-1.0 force-response-1.0
</VirtualHost>

5. Configuración de Alfresco

Como último paso, es necesario indicar en la configuración de Alfresco el nuevo puerto para las peticiones.


# vi /opt/alfresco/tomcat/shared/classes/alfresco-global.properties

alfresco.context=alfresco
alfresco.host=alfresco.keensoft.es
alfresco.port=443
alfresco.protocol=https

share.context=share
share.host=alfresco.keensoft.es
share.port=443
share.protocol=https

6. Renovación automática del certificado SSL

Los certificados de Let’s Encrypt caducan a los 90 días, por lo que es necesaria una política automatizada para su renovación. La opción --renew-by-default permite generar un nuevo certificado en la misma ubicación sin necesidad de intervención humana. Un modo sencillo para configurar esta renovación automática consiste en incluir una nueva tarea cron.

En el siguiente ejemplo se configura con periodicidad mensual, ya que no es necesario esperar hasta la fecha de expiración del certificado para solicitar su renovación.

# vi /etc/cron.monthly/letsencrypt-renew.cron
service httpd stop
/root/letsencrypt/letsencrypt-auto --renew-by-default certonly --standalone -d alfresco.keensoft.es
service httpd start
# chmod +x /etc/cron.monthly/letsencrypt-renew.cron

Para cada renovación, un nuevo conjunto de certificados SSL es generado en la carpeta de archivo de Let’s Encrypt.

# ls -l /etc/letsencrypt/live/alfresco.keensoft.es/
lrwxrwxrwx 1 root root 44 ene  7 12:04 cert.pem -> ../../archive/alfresco.keensoft.es/cert3.pem
lrwxrwxrwx 1 root root 45 ene  7 12:04 chain.pem -> ../../archive/alfresco.keensoft.es/chain3.pem
lrwxrwxrwx 1 root root 49 ene  7 12:04 fullchain.pem -> ../../archive/alfresco.keensoft.es/fullchain3.pem
lrwxrwxrwx 1 root root 47 ene  7 12:04 privkey.pem -> ../../archive/alfresco.keensoft.es/privkey3.pem

Una vez realizada esta configuración, Alfresco presentará un canal seguro de comunicación SSL para todos sus protocolos y operaciones. Ya no hay excusa para no asegurar nuestras instalaciones en Internet.

Unidad de negocio, keensoft

Etiquetado bajo: , ,

13 Responses to “Como configurar Alfresco con SSL usando Let’s Encrypt”

  1. […] and Mac clients in this release. However, AOS requires HTTPs protocol, so you have to follow some available guides to make Alfresco running under […]

  2. […] protocolo HTTPs,  por lo que para realizar esta configuración quizá sea interesante seguir la guía que publicamos en nuestro blog hace algunos […]

  3. Adolfo Pachón dice: Responder

    Saludos:

    Estoy pez en Java, y me pierdo con los parámetros de configuración –with-apr y –with-java-home que propones en:

    ./configure –with-apr=/usr/local/apr –with-java-home=/opt/jdk1.8.0_66

    Uso Centos 7 con instalación de binarios via yum.

    Agradecería me aclarases qué necesito para tener /usr/local/apr y si puedo usar la instalación de java por defecto en Centos o tengo que hacer una instalación específica de paquetes.

    Gracias.

  4. Marcos dice: Responder

    Esto funciona con la ultima versión de alfresco 2017?

    • Debería funcionar, sí.

      • Marcos dice: Responder

        He seguido los pasos al pie de la letra….
        Tuve problemas con el modulo JK no me permitia compilar desde aca: –with-apxs=/usr/sbin/apxs lo cambie por –with-apxs=/usr/bin/apxs y funciono.

        Pero al terminar todo y reiniciar mi equipo (centos 7 + alfresco 2017) al ingresar por la url https me da este error:
        Service Unavailable

        The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.

        Pero si me muestra el certificado y el candadito verde… no se q pueda ser

        • Marcos dice: Responder

          Logre resolver por si le sirve a alguien.
          Si tu configuración del alfresco es por dominio y no usas IP, asegúrate que resuelva internamente ya que si resuelve externamente, necesitaras abrir algunos puertos como el 8009 para el mod_jk.

          En mi caso, cambie los DNS a uno interno, y funciono de maravillas.
          Gracias por el tutorial Angel

  5. Pol dice: Responder

    Hola, tienes este tutorial pero en ubuntu 16.04?

Deja un comentario

SUBIR