
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
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.
[…] and Mac clients in this release. However, AOS requires HTTPs protocol, so you have to follow some available guides to make Alfresco running under […]
[…] protocolo HTTPs, por lo que para realizar esta configuración quizá sea interesante seguir la guía que publicamos en nuestro blog hace algunos […]
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.
Tengo la misma duda, espero puedas responderla.
Tengo Centos 7, todo por yum incluso epel
Gracias!
Tienes q descargar el paquete jdk en tu opt… y va funcionar
Esto funciona con la ultima versión de alfresco 2017?
Debería funcionar, sí.
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
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
Gracias por el feedback, Marcos
Hola, tienes este tutorial pero en ubuntu 16.04?
No, pero será muy similar.
Ningún comando es compatible, partiendo de que uso apt-get install.