Com protegir Apache amb SSL i xifrem a FreeBSD


En aquest tutorial aprendrem a protegir el servidor HTTP Apache amb certificats TLS/SSL que ofereix Let's Encrypt a FreeBSD 11.x. També parlarem de com automatitzar el procés de renovació del certificat de Lets' Encrypt.

Els certificats TLS/SSL són utilitzats pel servidor web Apache per xifrar la comunicació entre nodes finals, o més habitualment entre el servidor i el client per tal de proporcionar seguretat. Let's Encrypt proporciona la utilitat de línia d'ordres de certbot, que és una aplicació que pot facilitar la manera com podeu obtenir certificats de confiança de manera gratuïta.

  1. Instal·lació de FreeBSD 11.x
  2. 10 coses a fer després de la instal·lació de FreeBSD
  3. Com instal·lar Apache, MariaDB i PHP a FreeBSD

Pas 1: configureu Apache SSL a FreeBSD

1. Abans de començar a instal·lar la utilitat certbot i crear el fitxer de configuració TSL per a Apache, primer creeu dos directoris diferents anomenats sites-available i sites-enabled al directori de configuració arrel d'Apache emetent les ordres següents.

L'objectiu d'aquests dos directoris és facilitar la gestió de la configuració de l'allotjament virtual al sistema, sense modificar el fitxer de configuració principal httpd.conf d'Apache cada vegada que afegim un nou host virtual.

# mkdir /usr/local/etc/apache24/sites-available
# mkdir /usr/local/etc/apache24/sites-enabled

2. Després d'haver creat els dos directoris, obriu el fitxer Apache httpd.conf amb un editor de text i afegiu la línia següent prop del final del fitxer, tal com es mostra a continuació.

# nano /usr/local/etc/apache24/httpd.conf

Afegiu la línia següent:

IncludeOptional etc/apache24/sites-enabled/*.conf

3. A continuació, activeu el mòdul TLS per a Apache creant a continuació un fitxer nou anomenat 020_mod_ssl.conf al directori modules.d amb el contingut següent.

# nano /usr/local/etc/apache24/modules.d/020_mod_ssl.conf

Afegiu les següents línies al fitxer 020_mod_ssl.conf.

Listen 443
SSLProtocol ALL -SSLv2 -SSLv3
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLPassPhraseDialog  builtin
SSLSessionCacheTimeout  300

4. Ara, elimineu el comentari del mòdul SSL del fitxer /usr/local/etc/apache24/httpd.conf eliminant l'etiqueta del principi de la línia següent, tal com es mostra a continuació:

LoadModule ssl_module libexec/apache24/mod_ssl.so

5. A continuació, creeu el fitxer de configuració TLS del vostre domini al directori de llocs disponibles, preferiblement amb el nom del vostre domini, tal com es mostra a l'extracte següent:

# nano /usr/local/etc/apache24/sites-available/bsd.lan-ssl.conf

Afegiu la següent configuració de virtualhost al fitxer bsd.lan-ssl.conf.

<VirtualHost *:443>
    ServerName www.yourdomain.com
	ServerAlias yourdomain.com
                DocumentRoot "/usr/local/www/apache24/data/"
	SSLEngine on

	SSLCertificateFile "/usr/local/etc/letsencrypt/live/www.yourdomain.com/cert.pem"
	SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/www.yourdomain.com/privkey.pem"
	SSLCertificateChainFile "/usr/local/etc/letsencrypt/live/www.yourdomain.com/fullchain.pem"

<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>

<Directory "/usr/local/www/apache24/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>

	BrowserMatch "MSIE [2-5]" \
        nokeepalive ssl-unclean-shutdown \
        downgrade-1.0 force-response-1.0

	CustomLog "/var/log/apache/httpd-ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

	<Directory "/usr/local/www/apache24/data/">
            Options Indexes FollowSymLinks MultiViews
        #AllowOverride controls what directives may be placed in .htaccess files.       
                        AllowOverride All
        #Controls who can get stuff from this server file
                        Require all granted
        </Directory>
       
    ErrorLog "/var/log/apache/yourdomain.ssl-error.log"
    CustomLog "/var/log/apache/yourdomain.ssl-access_log" combined

</VirtualHost>

Assegureu-vos de substituir la variable de nom de domini de les declaracions ServerName, ServerAlias, ErrorLog i CustomLog en conseqüència.

Pas 2: instal·leu Lets'Encrypt a FreeBSD

6. Al següent pas, emet l'ordre següent per instal·lar la utilitat certbot proporcionada per Let's Encrypt, que s'utilitzarà per obtenir certificats gratuïts d'Apache TSL per al vostre domini.

Durant la instal·lació de certbot, es mostrarà una sèrie de missatges a la pantalla. Utilitzeu la captura de pantalla següent per configurar la utilitat certbot. A més, compilar i instal·lar la utilitat certbot pot trigar una mica, depenent dels recursos de la vostra màquina.

# cd /usr/ports/security/py-certbot
# make install clean

7. Un cop finalitzat el procés de compilació, emet l'ordre següent per actualitzar la utilitat de certbot i les dependències necessàries per certbot.

# pkg install py27-certbot
# pkg install py27-acme

8. Per generar un certificat per al vostre domini, emeteu l'ordre tal com es mostra a continuació. Assegureu-vos que proporcioneu la ubicació correcta de l'arrel web on s'emmagatzemen els fitxers del vostre lloc web al sistema de fitxers (directiva DocumentRoot del fitxer de configuració del vostre domini) mitjançant el senyalador -w. Si teniu diversos subdominis, afegiu-los tots amb la marca -d.

# certbot certonly --webroot -w /usr/local/www/apache24/data/ -d yourdomain.com -d www.yourdomain.com

Mentre obteniu el certificat, proporcioneu una adreça de correu electrònic per a la renovació del certificat, premeu a per acceptar els termes i condicions de Let's Encrypt i n per no compartir l'adreça electrònica dels socis de Let's Encrypt.

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):[email 
There seem to be problems with that address. Enter email address (used for
urgent renewal and security notices)  If you really want to skip this, you can
run the client with --register-unsafely-without-email but make sure you then
backup your account key from /etc/letsencrypt/accounts   (Enter 'c' to cancel):[email 

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: a ------------------------------------------------------------------------------- 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 EFF and our work to encrypt the web, protect its users and defend digital rights. ------------------------------------------------------------------------------- (Y)es/(N)o: n Obtaining a new certificate Performing the following challenges: http-01 challenge for www.domain.com Using the webroot path /usr/local/www/apache24/data for all unmatched domains. Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /usr/local/etc/letsencrypt/live/www.yourdomain.com/fullchain.pem. Your cert will expire on 2017-11-15. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /usr/local/etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - 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

9. Després d'haver obtingut els certificats per al vostre domini, podeu executar l'ordre ls per llistar tots els components del certificat (cadena, clau privada, certificat) tal com es mostra a l'exemple següent.

# ls -al /usr/local/etc/letsencrypt/live/www.yourdomain.com/

Pas 3: actualitzeu els certificats Apache TLS a FreeBSD

10. Per afegir certificats Let's Encrypt al vostre lloc web, obriu el fitxer de configuració d'apache per al vostre domini i actualitzeu les línies següents per reflectir la ruta dels certificats emesos.

# nano /usr/local/etc/apache24/sites-available/bsd.lan-ssl.conf

Afegiu aquestes línies de certificat TLS:

SSLCertificateFile "/usr/local/etc/letsencrypt/live/www.yourdomain.com/cert.pem"
	SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/www.yourdomain.com/privkey.pem"
	SSLCertificateChainFile "/usr/local/etc/letsencrypt/live/www.yourdomain.com/fullchain.pem"

11. Finalment, activeu el fitxer de configuració TLS, creant un enllaç simbòlic per al fitxer de configuració TLS del vostre domini al directori habilitat per a llocs, comproveu les configuracions d'Apache per detectar possibles errors de sintaxi i, si la sintaxi és correcta, reinicieu el dimoni Apache emetent les ordres següents.

# ln -sf /usr/local/etc/apache24/sites-available/bsd.lan-ssl.conf /usr/local/etc/apache24/sites-enabled/
# apachectl -t
# service apache24 restart

12. Per comprovar si el servei Apache escolta al port HTTPS 443, emet l'ordre següent per llistar els sòcols de xarxa httpd.

# sockstat -4 | grep httpd

13. Podeu navegar a la vostra adreça de domini des d'un navegador mitjançant el protocol HTTPS per confirmar que els certificats de Let's Encrypt s'han aplicat correctament.

https://www.yourdomain.com

14. Per obtenir informació addicional sobre el certificat Let's Encrypt emès des de la línia d'ordres, utilitzeu l'ordre openssl de la següent manera.

# openssl s_client -connect www.yourdomain.com:443

15. També podeu verificar si el trànsit està xifrat amb un certificat vàlid proporcionat per Let's Encrypt CA des d'un dispositiu mòbil, tal com es mostra a la captura de pantalla del mòbil següent.

Això és tot! Els clients ara poden visitar el vostre lloc web de manera segura, perquè el trànsit que flueix entre el servidor i el navegador del client està xifrat. Per a tasques més complexes relacionades amb la utilitat certbot, visiteu l'enllaç següent: https://certbot.eff.org/