0. Introducción
Vamos a seguir a Mahdi Mashrur Matin a ver si esta vez sale bien.
1. Prerequisitos
- Tener privilegio de superusuario
- Tener un dominio registrado ("webprop.es" en mi caso)
- Versión de Java reciente instalada
- Versión reciente de Tomcat instalada
- Tener abiertos los puertos 80 y 8443 en el firewall
- Tener instalado Openssl
2. Instalar Certbot
Tal como vimos en el fallido blog anterior, primero añadimos al repositorio
- sudo add-apt-repository ppa:certbot/certbot
Instalamos el paquete Apache Certbot
- sudo apt install python-certbot-apache
3. Genera keypair y el certificado sobre el dominio con Certbot.
En el fallido blog anterior, estos ficheros si que los tenemos (por tanto podemos saltar este paso).
Para los que no hayais pasado por el blog anterior, debeis ejecutar:
sudo certbot certonly --standalone -d myweb.es
Y si toda ha ido bien, en el directorio /etc/letsencrypt/live/myweb.es (OJO: normalmente las direcciones suelen ser "csv.rocasdemar.es" o algo por el estilo, siendo el directorio /etc/letsencrypt/live/csv.rocasdemar.es) Deben existir estos ficheros:
- cert.pem (certificado "solo")
- chain.pem (cadena de certificados del root)
- fullchain.pem (certificado "solo" + cadena de certificados del root. Equivale a los 2 ficheros anteriores juntos)
- privkey.pem (clave privada)
Si no utilizais LetsEncript, tenéis que realizar estos pasos:
=============================================================
1. Generar un par de clave privada y el CSR público (Certificate Signing Request) para el servidor web ("server"), con este comando
openssl req -nodes -newkey rsa:2048 -keyout domain.name.key -out domain.name.csr
2. Enviar el CSR al la entidad certificadora (CA) y ésta verificará tu dominio, y te suministrará un certificado (fichero .crt) y cadena de certificados (certificate chain)
=============================================================
4. Configurar https en el puerto 19443 u otro de forma fácil (Opción recomendada)
Modificamos el conector en el fichero server.xml de la carpeta conf de tomcat y para el puerto 19443 para que quede así
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <Connector port="19443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" sslProtocol="TLS" clientAuth="true" keyAlias="tomcat" SSLCertificateFile="/etc/letsencrypt/live/midominio.es/cert.pem" SSLCertificateChainFile="/etc/letsencrypt/live/midominio.es/chain.pem" SSLCertificateKeyFile="/etc/letsencrypt/live/midominio.es/privkey.pem" /> |
5. Renovar el certificado en el servidor
Solo hace falta ejecutar el comando visto anteriormente, y ya está
sudo certbot certonly --standalone -d myweb.es
Si no funciona pues dice
Problem binding to port 443: Could not bind to IPv4 or IPv6
Entonces hay que parar el servidor (./shutdown.sh) y ejecutar el comando anterio cambiando
--standalone por --apache
sudo certbot certonly --apache -d myweb.es
PERO DA PROBLEMAS SI SE ACCEDE DESDE FUERA DE LA ORGANIZACION.
Lo mejor en estos casos es volver a instalar el cerbot, (paso 2)
Solo hay que reaarancar el Tomcat, para ello vamos al directorio "bin" del tomcat y ejecutamos
./shutdown.sh
./startup.sh
6. Configurar https en el puerto 8443 u otro con conversiones (NO RECOMENDADO)
El problema es que queremos utilizar el formato JKS, por tanto tenemos que realizar 2 conversiones
6.1. Convertir "keypair" + certificado a java keystore
1. Crear un PKCS12 que contenga la cadena de certrificados completa y la clave privada con openssl
openssl pkcs12 -export -out /tmp/webprop.es_fullchain_and_key.p12 \
-in /etc/letsencrypt/live/webprop.es/fullchain.pem \
-inkey /etc/letsencrypt/live/webprop.es/privkey.pem \
-name tomcat
2. Convertir el PVCS12 a JKS con keytool de java
keytool -importkeystore \
-deststorepass mi_password -destkeypass mi_password -destkeystore /tmp/webprop.es.jks \
-srckeystore /tmp/webprop.es_fullchain_and_key.p12 -srcstoretype PKCS12 -srcstorepass mi_password \
-alias tomcat
Donde hay que cambiar mi_password por la contraseña que querais
Si no utilizais LetsEncript, tenéis que realizar estos pasos:
=============================================================
1. Con el paso del punto anterior ya tienes la clave privada (fichero .key) y el certificado (fichero .cert) de la entidad certificadora. Se deberá generrar el fichero pfx, con este comando
openssl pkcs12-export -out domain.name.pfx -inkey domain.name.key -in domain.name.crt
2. Convertir el fichero pfx a JKS
keytool-importkeystore -srckeystore webprop.pfx -srcstoretype pkcs12 \
-destkeystore webprop.jks -deststoretype JKS
=============================================================
6.2. Configurar Tomcat con el java keystore
Aseguratrse que esta sección de conf/server.xml está comentada
<!---
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-->
Y configurar el conector para que use el "shared thread pool"
<Connector
executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
Ahora definir el conector SSL HTTP/1.1 En el puerto 8443
<Connector port="8443"
<!-- protocol="org.apache.coyote.http11.Http11Protocol"-->
protocol="HTTP/1.1"
maxThreads="150" cd ..
SSLEnabled="true"
scheme="https"
secure="true"
keystoreFile="/tmp/webprop.es.jks"
keystorePass="mi_password"
clientAuth="false"
sslProtocol="TLS" />
NOTA: He tenido que comentar la línea:
"<!-- protocol="org.apache.coyote.http11.Http11Protocol"-->"
y cambiarla por la línea de rojo (protocol="HTTP/1.1") pues no me funcionaba.
Ahora hay que rearrancar el Tomcat y debería funcionar. Aunque a mi me ha tardado mucho en arrancar!!
6.3. Crear un shell scrypt para renovar el certificado.
Para ello debemos tener los siguientes prerequisitos:
- Tener privilegio de superusuario
- Tener un dominio registrado ("webprop.es" en mi caso)
- Versión de Java reciente instalada
- Versión reciente de Tomcat instalada
- Tener abiertos los puertos 80 y 8443 en el firewall
- Tener instalado Openssl
- Tener configurado Tomcat para el puerto 8443 tal como hemos visto en el punto anterior
Veamos el bash
#!/bin/bash #--Explicació #--------------------------------------------------------------------------- # S'ha d'executar des de la màquina que s'ha d'instal·lar el certificat # Ha d'estar instal·lat el cerbot a la màquina: # sudo add-apt-repository ppa:certbot/certbot # sudo apt install python-certbot-apache # La carpeta /etc/letsencrypt/live/csv.tavernesvalldigna.es/ ha de tindre # permissos d'escritura per a eviar cridar-la amb "sudo" # per tant cal executar abans esta orden: # sudo chmod -R ugo+rwx /etc/letsencrypt # sudo chmod -R ugo+rwx /var/log # sudo chmod -R ugo+rwx /var/lib/letsencrypt # 1. Indicar el domini # 2. Indicarla carpeta on guarda el certbot els certificats # 3. Indicar la carpeta on guardar els certificats tipus jks # que és la ruta on Tomcat els busca # 4. Indicar la paraula de pas del certificat #--------------------------------------------------------------------------- #--Parameters myuser='ximo' domain='webprop.es' download_certbot='/etc/letsencrypt/live/'${domain} keystore_folder='/home/'${myuser}'/MyKeystores' psswrd='mi_password' work_folder=${keystore_folder}'/letsencrypt/'$(date +%Y.%m.%d) ks_prefix=${work_folder}'/'${domain} JAVA_HOME='/home/'${myuser}'/MyPrograms/jdk-15.0.2+7.OpenJ7' echo '--------------------------------------------------------------' echo 'Usuari: ' $myuser echo 'Domain: ' $domain echo 'Descarga Certbot: ' $download_certbot echo 'Keystore folder: ' $keystore_folder echo 'Paraula de pas : ' $psswrd echo 'Work folder : ' $work_folder echo 'Keystore prefix : ' $ks_prefix echo 'JAVA_HOME : ' $JAVA_HOME echo '--------------------------------------------------------------' certbot certificates echo '--------------------------------------------------------------' echo Por favor, verificar que los datos son correctos read continuar # No se si vol "csv.tavernesvalldigna.es" o si "vol sols tavernesvalldigna.es" # Descarreguem el certificat a /etc/letsencrypt/live/csv.tavernesvalldigna.es/ certbot certonly --standalone -d ${domain} echo Creem la carpeta ${work_folder} mkdir -p ${work_folder} echo Convertir el p12 i el pem a PKCS12 openssl pkcs12 -export -out ${ks_prefix}'_fullchain_and_key.p12' -in ${download_certbot}'/fullchain.pem' -inkey ${download_certbot}'/privkey.pem' -password pass:${psswrd} -name 'tomcat' echo Convertir el PKCS12 a JKS $(${JAVA_HOME}'/bin/keytool' -importkeystore -deststorepass ${psswrd} -destkeypass ${psswrd} -destkeystore ${ks_prefix}'.jks' -srckeystore ${ks_prefix}'_fullchain_and_key.p12' -srcstoretype PKCS12 -srcstorepass ${psswrd} -alias 'tomcat') echo Copiar a la carpeta MyKeystore cp ${ks_prefix}'.jks' ${keystore_folder}
No hay comentarios :
Publicar un comentario