SSL - Apache

De WikiCat IT
Dreceres ràpides: navegació, cerca

En aquesta secció aprendrem a generar certificats SSL i configurar l'Apache per a què la nostra web sigui segura, utilitzant el protocol HTTPS.

Es recorda que per tal de poder fer la configuració es necessita privilegis de superusuari.

Comprovacions preliminars

En aquest apartat, donem per segur que la instal·lació de LAMP s'ha realitzat correctament i que la web funciona a traves del port 80.

El servidor funciona per defecte pel port 80, però cal executar la següent comanda per tal de posar en funcionament el protocol SSL i reiniciar el servei.

a2enmod ssl
service apache2 restart

Ara passem a comprovar que el servidor Apache està preparat per rebre peticions pel port 443. Tot executant la següent comanda:

netstat -nl | grep 443

La sortida hauria de ser una cosa semblant el que es veu a continuació. Si la sortida no surt el que esperem potser que l'Apache no estigui funcionant correctament o que tinguem un firewall bloquejant el servei.

tcp6       0      0 :::443                  :::*                    LISTEN 

També haurem de comprovar si tenim instal·lat OpenSSL, si no fos el cas haurem d'executar la següent comanda per tal de fer la instal·lació, però cal dir que en Raspbian normalment sol estar per defecte instal·lat.

apt-get install openssl

Creació certificats

Certificats Auto-signats simples

Per generar els nostres propis certificats, també hi ha diverses formes de fer però utilitzarem aquesta que es molt simple i funciona. Cal executar les comandes següents per generar els dos certificats.

mkdir -p /etc/ssl/localcerts
openssl req -new -x509 -days 365 -nodes -out /etc/ssl/localcerts/apache.pem -keyout /etc/ssl/localcerts/apache.key
chmod 600 /etc/ssl/localcerts/apache*

En la segona comanda es comença a fer unes preguntes per tal de poder fer el certificat, caldrà respondre a totes les preguntes i sobretot, important, en la pregunta que diu una cosa semblant això "fqdn (fully qualified name)", caldrà respondre amb el nom del domini que tindrà la web.

Un cop haguéssim fet això, ja tenim els certificats necessaris, ara només cal fer la configuració del servidor que veurem més endavant.

Certificats Auto-signats complexos

Per generar certificats de forma més complexe, caldrà executar les següents comandes, per tal de generar les carpetes on desarem els certificats.

mkdir /root/SSLCertAuth
chmod 700 /root/SSLCertAuth
cd /root/SSLCertAuth
mkdir certs private newcerts
echo 1000 > serial
touch index.txt

Generació Entitat de Certificació

És necessitat d'una entitat generadora de certificats per tal de poder-los realitzar. Per fer-ho possible haurem d'executar la següent comanda:

openssl req -new -x509 -days 3650 -extensions v3_ca \-keyout private/cakey.pem -out cacert.pem \-config /etc/ssl/openssl.cnf

En aquesta comanda es comença a fer unes preguntes per tal de poder fer l'entitat, caldrà respondre a totes les preguntes i sobretot, important, en la pregunta que diu una cosa semblant això "fqdn (fully qualified name)", caldrà respondre amb el nom del domini que tindrà la web.

Un cop realitzat ja tenim la nostra entitat certificadora configurada i preparada per realitzar certificats.

Generar una sol·licitud de signatura

En aquest moment generem una clau privada i la sol·licitud de signatura del certificat. Per fer això, cal executar la següent comanda:

openssl req -new -nodes \-out apache-req.pem \-keyout private/apache-key.pem \-config /etc/ssl/openssl.cnf

Tal com ha passat en l'apartat anterior, cal respondre a les preguntes realitzades i sobretot posar el nom del domini,on diu "fqdn (fully qualified name)".

En aquest moment en la carpeta "/root/SSLCertAuth" tenim els fitxers "apache-req.pem" i "apache-key.pem" que ens seran útils en el darrer pas.

Crear i signar el certificat SSL

En aquest punt, només ens queda fer signar-nos el nostre propi certificat SSL. Per fer això, només caldrà executar la següent comanda:

openssl ca \-config /etc/ssl/openssl.cnf \-out apache-cert.pem \-infiles apache-req.pem

Un cop enllestit ja tenim els certificats necessaris, només ens cal ubicar-los on toca, per fer-ho executarem les següents comandes:

mkdir /etc/ssl/crt
mkdir /etc/ssl/key
cp /root/SSLCertAuth/apache-cert.pem /etc/ssl/crt
cp /root/SSLCertAuth/private/apache-key.pem /etc/ssl/key

Certificats SSL per mitja de la web Let's Encrypt

Aquest ho deixem per més endavant. La web: Let's Encrypt

Configuració VirtualHost Apache

Per defecte, el servidor Apache inclou un arxiu de configuració de VirtualHost en mode exemple "default-ssl". Per fer-ho de forma simple, es recomenable que copiis el fitxer HTTP i el converteixis en HTTPS. Per realitzar això només caldrà executar la següent comanda:

cd /etc/apache2/sites-available/
cp mywebapp mywebapp-ssl

Un cop realitzat la copia només cal editar l'arxiu "mywebapp-ssl" amb l'editor que vulguis i seguir aquests passos:

1. Canviar el port 80 pel 443:

<VirtualHost mywebapp.didacticat.com:443>

2. Canviar els noms dels arxius de log de connexió i error:

ErrorLog /var/log/apache2/mywebapp-ssl-error.log
CustomLog /var/log/apache2/mywebapp-ssl-access.log combined

3. Agregar la configuració SSL dintre de la secció <VirtualHost>:

        ## Habilitem el motor SSL
        SSLEngine on
        ## Seleccionem els certificats SSL
        SSLCertificateFile /etc/ssl/crt/apache-cert.pem
        SSLCertificateKeyFile /etc/ssl/key/apache-key.pem
        ## Exportem variables SSL a l'entorn PHP i Python
        <FilesMatch "\.(php|py)$">
                SSLOptions +StdEnvVars
        </FilesMatch>
        ## Habilitacio per navegadors obsolets
        BrowserMatch "MSIE [2-6]" \
                nokeepalive ssl-unclean-shutdown \
                downgrade-1.0 force-response-1.0
        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

Un cop fet el descrit anteriorment, caldrà activar aquesta configuració. Per fer això, només cal executar la següent comanda:

a2ensite mywebapp-ssl
service apache2 reload

Si tot els procés s'ha fet de forma correcta, no hauria d'haver cap error en la implementació del certificat.

Comprovacions finals

En aquest moment podem mirar en el navegador com es carrega la nostra web, cal dir que la primera vegada caldrà acceptar el certificat com a bo.

Per fer les comprovacions no ens cal el navegador, només ens cal executar aquesta comanda i si tenim connexió no hauria de donar cap error.

openssl -debug -connect 192.168.0.200:443

Si per alguna mala configuració no tenim connexió, només caldrà executar la comanda anterior i ens dirà quin es l'error que tenim. Sol estar en el fitxer "mywebapp-ssl". També podrem mirar els fitxers "mywebapp-ssl-error.log" i "mywebapp-ssl-access.log".

Eines de l'usuari
Espais de noms

Variants
Navegació
Eines