jueves, 2 de diciembre de 2021

(FALLA) Instalar certificado LetsEncrypt en Apache Ubuntu server

0. Introducción

Se ha seguido esta web de Digital Ocean y Devanswers 

1. Identificar el dominio

Para tener un dominio virtual hay que tener un servidor de DNS que reconozca a dicho dominio para que lo redireccione.

En el caso que no lo tengamos, para hacer las pruebas el punto 2 debemos modificar el fichero /etc/hosts para que pueda ver ese nombre, tanto en el servidor local como en cada una de las máquinas que quieran acceder a dicho servidor.

En ese caso se definirán los dominios o hosts (webprop.es y www.webprop.es)

NOTA: Para que letsencrypt pueda darte un certificado, debes tener el dominio registrado, es decir, que cualquiera, desde cualquier sitio pueda hacer un ping a tu dominio y que esté localizable. Para ello se puedes probar el google cloud DNS que tiene un período de pruebas. Yo no lo he probado, pero algunos dicen que funciona.

Para poder gestionar el dominio debes:

a. Crear el dominio y registrarlo

b. En tu firewall debes redirigir este dominio a la máquina y puerto correcto

c. En tu servidor interno de DNS debes redirigir el dominio a tu máquina y puerto internos correcto para que no vaya al exterior y vuelva a entrar


2. Localizar los ficheros de configuración

Fichero nº1:

Veamos el primer fichero de configuración (según Rich Bowen) , para ello ejecutamos

httpd -V

Y si no la encuentra, ejecutar esta otra

apache2ctl -V

Y contesta esto

Server version: Apache/2.4.29 (Ubuntu)

Server built:   2021-09-28T22:27:27

Server's Module Magic Number: 20120211:68

Server loaded:  APR 1.6.3, APR-UTIL 1.6.1

Compiled using: APR 1.6.3, APR-UTIL 1.6.1

Architecture:   64-bit

Server MPM:     event

  threaded:     yes (fixed thread count)

    forked:     yes (variable process count)

Server compiled with....

 -D APR_HAS_SENDFILE

 -D APR_HAS_MMAP

 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)

 -D APR_USE_SYSVSEM_SERIALIZE

 -D APR_USE_PTHREAD_SERIALIZE

 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT

 -D APR_HAS_OTHER_CHILD

 -D AP_HAVE_RELIABLE_PIPED_LOGS

 -D DYNAMIC_MODULE_LIMIT=256

 -D HTTPD_ROOT="/etc/apache2"

 -D SUEXEC_BIN="/usr/lib/apache2/suexec"

 -D DEFAULT_PIDLOG="/var/run/apache2.pid"

 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"

 -D DEFAULT_ERRORLOG="logs/error_log"

 -D AP_TYPES_CONFIG_FILE="mime.types"

 -D SERVER_CONFIG_FILE="apache2.conf"

Donde podemos adivinar que el fichero de configuración del httpd es /etc/apache2/apache2.conf

que se ha obtenido al unir las 2 cadenas marcadas en color azul y rojo

Este fichero lo utilizaríamos si quisiésemos tener más de un nombre de dominio junto diferentes IPs para un mismo servidor y se acutaría creando diferentes entradas de <VirtualHost IP:80> en este fichero, indicacando diferentes IPs para cada servidor virtual, por ejemplo 

<VirtualHost 172.20.30.40:80>

Para el caso de querer tener un solo dominio, me parece más sencillo utilizar el segundo fichero que expongo a continuación

Fichero nº2:

Vamos a la carpeta /etc/apache2/sites-available  y en mi caso hago un ls y veo que hay 2 ficheros: 000-default.conf y default-ssl.conf siendo el primero el que nos interesa.

Supongamos que queremos definir untenmos un dominio llamado webprop.es para ello editamos el fichero 000-default.conf y le dejamos este contenido

sudo nano /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
    ServerAdmin webmaster@webprop.es
    ServerName webprop.es
    ServerAlias www.webprop.es
    DocumentRoot /var/www/webprop.es/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Ojo: en la primera línea vemos que para cualquier IP le asignamos el dominio que definimos posteriormente (webprop)

Salvamos con CTRL + O y salimos conCTRL + X,

Ahora creamos un directorio

sudo mkdir -p /var/www/webprop.es/public_html

Creamos un fichero index.html (que és el que nos dará la bienvenida al apuntar con el navegador (http://webprop.es/) para probar

sudo nano /var/www/webprop.es/public_html/index.html
<html>
   <head>
     <title>Welcome!</title>
   </head>
   <body>
      <h1>Welcome to webprop.es! Hava a nice day!</h2>
   </body>
</html>
Salvamos con CTRL + O y salimos conCTRL + X,


Ahora comprobamos errores

apachectl configtest

y nos da errores

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message

Para definir la directiva ServerName globalmente tenenos que modificar el fichero 1 ( /etc/apache2/apache2.conf) :

sudo nano /etc/apache2/apache2.conf
Y le añadimos esta línea al final

ServerName webprop.es

Salvamos con CTRL + O y salimos conCTRL + X,

Reiniciamos el servidor apache y si le damos otra vez a comprobar errores (apachectl configtest) vemos que ya no tenemos errores.


3. Instalar Certbot

Añadimos al repositorio

  • sudo add-apt-repository ppa:certbot/certbot

Instalamos el paquete Apache Certbot

  • sudo apt install python-certbot-apache

4. Obtener un certificado SSL

OJO: Como requisito previo, debemos tener abierto el firewall en el puerto 80 para este dominio  !!!!!!!
Esto conlleva muchas vulnerabilidades, por tanto, dejarlo solamente abierto por el tiempo necesario para que LetsEncrypt pueda verificar que el servidor existe !

Ejecutamos

sudo certbot --apache
o también podemos indicarle el dominio directamente

sudo certbot --apache -d webprop.es

Nos pide un email y luego nos pide que estemos de acuerdo

Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel:

A continuación nos sugiere que recibamos información al respecto

Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.

Ahora nos dice que dominios queremos activar

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: webprop.es
2: www.webprop.es
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):

Aceptamos todos y SI NO HEMOS CREADO UN DOMINIO REGISTRADO, NOS DA ESTOS ERRORES:

Obtaining a new certificate
Performing the following challenges:
http-01 challenge for webprop.es
http-01 challenge for www.webprop.es
Enabled Apache rewrite module
Waiting for verification...
Cleaning up challenges
Failed authorization procedure. www.webprop.es (http-01): urn:ietf:params:acme:error:dns :: DNS problem: NXDOMAIN looking up A for www.webprop.es - check that a DNS record exists for this domain, webprop.es (http-01): urn:ietf:params:acme:error:dns :: DNS problem: NXDOMAIN looking up A for webprop.es - check that a DNS record exists for this domain

IMPORTANT NOTES:
 - The following errors were reported by the server:

   Domain: www.webprop.es
   Type:   None
   Detail: DNS problem: NXDOMAIN looking up A for www.webprop.es -
   check that a DNS record exists for this domain

   Domain: webprop.es
   Type:   None
   Detail: DNS problem: NXDOMAIN looking up A for webprop.es - check
   that a DNS record exists for this domain

Por tanto hay que tener los dominios registrados, y abierto el puerto 80 en el firewall, ya que si no le hemos hecho puede responder que hay un conncetion time-out por no poder acceder al puerto 80. En este caso contesta favorablemente
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
Pero yo le he contestado la opción 2 y me contesta

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for webprop.es
Enabled Apache rewrite module
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/000-default-le-ssl.conf
Enabled Apache socache_shmcb module
Enabled Apache ssl module
Deploying Certificate to VirtualHost /etc/apache2/sites-available/000-default-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/000-default-le-ssl.conf

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Enabled Apache rewrite module
Redirecting vhost in /etc/apache2/sites-enabled/000-default.conf to ssl vhost in /etc/apache2/sites-available/000-default-le-ssl.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://webprop.es

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=webprop.es
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/webprop.es/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/webprop.es/privkey.pem
   Your cert will expire on 2022-03-07. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le
Pero mi gozo en un pozo, pues no me deja utilizar el puerto 8443, solo el puerto 80 y 443

Veamos como solucionar el entuerto 

5. Deshacer el entuerto

1. Debemos ver si al menos los certificados se han descargado, para ello hacemos:

sudo certbot certificates
y nos muestra
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following certs:
  Certificate Name: webprop.es
    Domains: webprop.es
    Expiry Date: 2022-03-07 12:30:51+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/webprop.es/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/webprop.es/privkey.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Con lo que nuestros certificados parecen totalmente generados
Si vamos al directorio  /etc/letsencrypt/live/webprop.es , vemos que están estos ficheros:
  • cert.pem
  • chain.pem
  • fullchain.pem
  • privkey.pem
  2. Tenemos que advertir que ha cambiado la configuración del Tomcat, en concreto:

  2.1. En el fichero /etc/apache/etc/apache2/sites-available/000-default.conf ha añadido líneas de configuración al final de la etiqueta <VirtualHost *:80> que debemos eliminar o comentar
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.csv.tavernesvalldigna.es [OR]
RewriteCond %{SERVER_NAME} =csv.tavernesvalldigna.es
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

Con lo que nos queda

<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

#       ServerAdmin webmaster@localhost
#       DocumentRoot /var/www/html


        ServerAdmin webmaster@webprop.es
        ServerName webprop.es
ServerAlias webprop.es
DocumentRoot /var/www/webprop.es/public_html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn, # error, crit, alert, emerg. # It is also possible to configure the loglevel for particular # modules, e.g. #LogLevel info ssl:warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # For most configuration files from conf-available/, which are # enabled or disabled at a global level, it is possible to # include a line for only one particular virtual host. For example the # following line enables the CGI configuration for this host only # after it has been globally disabled with "a2disconf". #Include conf-available/serve-cgi-bin.conf #Added by CertBot #RewriteEngine on #RewriteCond %{SERVER_NAME} =www.csv.tavernesvalldigna.es [OR] #RewriteCond %{SERVER_NAME} =csv.tavernesvalldigna.es #RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] </VirtualHost>

2.2 También ha credo el fichero /etc/apache/etc/apache2/sites-available/000-default-le-ssl.conf que debemos borrar.

2.3 Parece ser que el fichero conf/server.xml no ha cambiado.

Vamos ahora a la siguiente entrada del blog para arreglar el asunto.



No hay comentarios :

Publicar un comentario