9.7 KiB
les't encryp con VenenuX para Devuan y Debian
Esta guia le servira para cualquier sistema debian inclusive aquellos viejos, ud puede tener un debian 7, 8 inclusive debian 6 o 5 y aun le servira.
dehydrated
dehydrated
es un cliente o programa para obtener certificados validos
desde una entidad en internet, para tu servidor web, y tambien para
los demas servicios, es el supuesto "candado en la barra de internet"
segun los ignorantes.
Este tambien servira para otros servicios, ya pues el XMPP, IMAP, HTTPS, etc etc .. ya que se puede construir en varios multidominios.
http-01 VS dns-01: cada maquina que ejecuta el servicio debe de
ejecutar su propia instancia de dehydrated
si se emplea el metodo
de verificacion http-01
a menos se utilize el dns-01
y complicados hooks
este ultimo verifica ciertos dominios especiales en el dns propio, mas simple
es el primero y mas rapido de implementar, ambos requieren tener o control
del servicio web o control del servidio dns donde se ejecute el programa.
Requisitos
- usar
dehydrated
por cada host en cada direccion ip. (ver abajo) - el dominio valido:
venenuxdom.com
- subdominios validos:
www.venenuxdom.com
imap.venenuxdom.com
smtp.venenuxdom.com
- el DNS al menos 12 hora con todos los
venenuxdom.com
Estos requisitos significa que la maquina donde esta venenuxdom.com
es la misma donde esta los otros subdominios, si alguno subdominio no
esta hosteado o es de dicha maquina, no debera usarse, ejemplo:
otro.venenuxdom.com
esta en 192.1.1.4 -> no aplicawww.venenuxdom.com
esta en 192.1.1.5 -> si aplicavenenuxdom.com
esta en 192.1.1.5 -> maquina donde se ejecuta el scriptimap.venenuxdom.com
esta en 192.1.1.5 -> si aplica
Instalacion
Ejecutaremos un paquete que por tener dependencias fijas y limpias, sirve en todos los debians, a la fecha, esto si es un verdadero programa, porque no tiene dependencias esquisitas ni especificas de versiones:
apt-get install openssl curl wget bash
wget http://http.us.debian.org/debian/pool/main/d/dehydrated/dehydrated_0.6.2-2+deb10u1~bpo9+1_all.deb
dpkg -i dehydrated_0.6.2-2+deb10u1~bpo9+1_all.deb
El paquete aqui es la version de buster
ejecutada en cualquier debian
sin problemas, ya que solo depende de bash
, openssl
y curl
.
Configuracion principal
La configuracion necesita parametros para la identificacion de cuenta, el dominio al cual se el crea el certificado de esa maquina (puesto la maquina donde se ejecuta es la que necesitara el certificado).
cat > /etc/dehydrated/domains.txt << EOF
venenuxdom.com mail.venenuxdom.com smtp.venenuxdom.com imap.venenuxdom.com www.venenuxdom.com mx.venenuxdom.com
EOF
cat > /etc/dehydrated/conf.d/00_defaultaccount.sh << EOF
WELLKNOWN="/var/lib/dehydrated/acme-challenges/"
CONTACT_EMAIL="root@venenuxdom.com"
EOF
mkdir /var/lib/dehydrated/certs
dehydrated --register --accept-terms --challenge http-01
configuracion por http
La configuracion empleara el metodo http-01
que es probando http siendo
el DNS ya activo y valido, por lo que simplemente necesita que el servidor
web de el certificado este ejecutando y que dehydrated
este en la misma
maquina que el servidor web.
NOTA IMPORTANTE los siguientes comando se pueden ejecutar tengan o no
instalado apache
o lighttpd
, al menos uno de los dos debe estar instalado.
cat > /etc/lighttpd/conf-available/15-dehydrated.conf << EOF
alias.url += (
"/.well-known/acme-challenge/" => "/var/lib/dehydrated/acme-challenges/",
)
EOF
lighty-enable-mod dehydrated
/usr/sbin/service lighttpd restart
cat > /etc/apache2/conf-available/dehydrated.conf << EOF
Alias /.well-known/acme-challenge /var/lib/dehydrated/acme-challenges/
<Directory /var/lib/dehydrated/acme-challenges/>
Options None
AllowOverride None
<IfModule !mod_authz_core.c>
Order allow,deny
Allow from all
</IfModule>
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
</Directory>
EOF
/usr/sbin/service apache2 restart
Ejecucion y certificados
Una vez configurados se ejecuta el comando que guardara los certificados
en /var/lib/dehydrated/certs/
con directorio igual al dominio de cada
uno de los especificados en domains.txt
.
NOTA IMPORTANTE aqui se ejecuta un paso adicional, se "combina" y se produce
un tercer y ultimo certificado para sistemas como courier
y lighttpd
necesarios.
dehydrated --cron --challenge http-01
cat /var/lib/dehydrated/certs/venenuxdom.com/cert.pem /var/lib/dehydrated/certs/venenuxdom.com/privkey.pem > /var/lib/dehydrated/certs/venenuxdom.com/privcert-lasted.pem
ln -sf privcert-lasted.pem /var/lib/dehydrated/certs/venenuxdom.com/privcert.pem
chown daemon:root /etc/courier/*.pem
chmod 640 /etc/courier/*.pem
En este punto ya se tiene todos los "pem's" necesarios que son los cerfiles.
Como usar los certificados:
Varios serivicios ahora deben cambiar el certificado y reiniciarse, para automatizarlos visite la seccin de hooks y automatizacion mas abajo, enla cual se puede agregar scripts que en cada renovacion automaticamente reinicie dichos servicios:
lighttp
sed -i -r 's#.*ssl.pemfile =.*#ssl.pemfile = "/var/lib/dehydrated/certs/venenuxdom.com/privcert.pem"#g' /etc/lighttpd/conf-available/10-ssl.conf
/usr/sbin/lighty-enable-mod ssl
/usr/sbin/service lighttpd restart
apache
sed -s -i -r 's|\tSSLCertificateFile.*|\tSSLCertificateFile /var/lib/dehydrated/certs/venenuxdom.com/cert.pem|g' /etc/apache2/sites-available/default-ssl
sed -s -i -r 's|\tSSLCertificateKeyFile.*|\tSSLCertificateKeyFile /var/lib/dehydrated/certs/venenuxdom.com/privkey.pem|g' /etc/apache2/sites-available/default-ssl
sed -s -i -r 's|\tSSLCertificateChainFile.*|\tSSLCertificateChainFile /var/lib/dehydrated/certs/venenuxdom.com/chain.pem|g' /etc/apache2/sites-available/default-ssl
sed -s -i -r 's|\tSSLCACertificateFile.*|\tSSLCACertificateFile /var/lib/dehydrated/certs/venenuxdom.com/fullchain.pem|g' /etc/apache2/sites-available/default-ssl
/usr/sbin/a2enmod ssl
/usr/sbin/service lighttpd restart
courier
cp /var/lib/dehydrated/certs/venenuxdom.com/privcert-lasted.pem /etc/courier/privcert.pem
chown daemon:root /etc/courier/*.pem
chmod 640 /etc/courier/*.pem
sed -i -r 's|^TLS_CERTFILE.*|TLS_CERTFILE=/etc/courier/privcert.pem|g' /etc/courier/esmtpd
sed -i -r 's|^TLS_CERTFILE.*|TLS_CERTFILE=/etc/courier/privcert.pem|g' /etc/courier/esmtpd-ssl
sed -i -r 's|^TLS_CERTFILE.*|TLS_CERTFILE=/etc/courier/privcert.pem|g' /etc/courier/imapd-ssl
for i in /etc/init.d/courier*; do $i restart; done
prosody
sed -i -r 's#key =.*#key = "/var/lib/dehydrated/certs/venenuxdom.com/privkey.pem";#g' /etc/conf.avail/venenuxdom.com.cfg.lua
sed -i -r 's#certificate =.*#certificate = "/var/lib/dehydrated/certs/venenuxdom.com/cert.pem";#g' /etc/conf.avail/venenuxdom.com.cfg.lua
/usr/sbin/service prosody restart
postfix
smtpd_tls_cert_file = /etc/dehydrated/certs/domain.tld/fullchain.pem /etc/postfix/main.cf
smtpd_tls_key_file = /etc/dehydrated/certs/domain.tld/privkey.pem /etc/postfix/main.cf
smtpd_use_tls=yes /etc/postfix/main.cf
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache /etc/postfix/main.cf
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache /etc/postfix/main.cf
systemctl restart postfix
hooks y automatizacion
Se puede automatizar, mediante hooks, dehydrated
soporta multiples hook con
un pequeño truco, pero se puede hacer que este llame a otros:
mkdir /var/lib/dehydrated/hooks.d
cat > /var/lib/dehydrated/hooks.sh << EOF
#!/usr/bin/env bash
# Simple script which allows the use of multiple hooks
for file in /var/lib/dehydrated/hooks.d/*
do
\${file} "\$@"
done
EOF
chmod +x /var/lib/dehydrated/hooks.sh
Entonces todos lso hooks deben estar en el directorio /var/lib/dehydrated/hooks.d
con extension .sh
y marcados como ejecutables, para que puedan procesar:
Ejemplo de un hook para que lighttpd pueda usar automaticamente un certificado renovado sin pasos manuales, es decir este script se coloca en el directorio de hooks y se procesara un nuevo pem combinado siempre:
#!/usr/bin/env bash
deploy_cert() {
local DOMAIN="${1}" KEYFILE="${2}" CERTFILE="${3}" FULLCHAINFILE="${4}" CHAINFILE="${5}" TIMESTAMP="${6}"
echo "Executing deploy_cert hook $0"
echo " + Creating privcert.pem (a combined privkey.pem + cert.pem)"
cd "$(dirname "${CERTFILE}")" && {
cat "${KEYFILE}" "${CERTFILE}" > "privcert-${TIMESTAMP}.pem" && \
ln -sf "privcert-${TIMESTAMP}.pem" "privcert.pem" && {
# Loop over all files of this type
for filename in "privcert-"*".pem"; do
# Check if current file is in use, remove if unused
if [[ ! "${filename}" = "privcert-${TIMESTAMP}.pem" ]]; then
echo " + Removing unused combined certificate file: ${filename}"
rm "${filename}"
fi
done
}
}
}
HANDLER="$1"; shift
if [[ "${HANDLER}" = "deploy_cert" ]]; then
"$HANDLER" "$@"
fi
para automatizarlo hay que ahora agregar las tareas a cron en el sistema, esto es usando el cron mensual:
cat > /etc/cron.monthly/dehydrated << EOF
#!/bin/sh
test -x /usr/bin/dehydrated || exit 0
/usr/bin/dehydrated --cron --challenge http-01 --accept-terms
test -x /etc/init.d/lighttpd || exit 0
/usr/sbin/service lighttpd restart
test -x /etc/init.d/nginx || exit 0
/usr/sbin/nginx lighttpd restart
EOF
chmod 755 etc/cron.monthly/dehydrated
con esto cada mes se renovara los archivos..
Conclusion
dehydrated
es la opcion mandatoria para los que necesitan alta seguridad,
pues evita tener que instalar compiladores (chain tools) ni dependencias.