Installare un certificato SSL Let’s Encrypt su cPanel

Facciamo chiarezza sui certificati SSL

Un certificato SSL può salvarti la vita e anche complicartela parecchio (vedi cosa mi è successo qui). Però diciamo che il più delle volte può aiutarti a dare una certa fiducia al visitatore, che se è attento, noterà un lucchetto nella barra dell’indirizzo e potrà stare tranquillo mentre ti compila un form, sia esso di richiesta informazioni sia (ma meno frequente) nel lasciarti i dati della carta di credito, perchè tutte le informazioni da e per il dominio certificato sono criptatate (a vari livelli) e non è possibile intercettarle. Ottimo e funzionale.

Tecnicamente diciamo che un certificato SSL non è nient’altro che un “sigillo” rilasciato da una società autorizzata e certificata (CA ovvero Certification Authority) che dice che il dominio è effettivamente della società proprietaria. La verifica è davvero abbastanza complicata e potrebbero chiamare in ufficio per sentire se risponde davvero quella società (è successo, non so se è la prassi).

Ma se da un punto di vista etico un certificato SSL non può che far bene alla navigazione dell’utente e all’immagine del sito, i problemi sono di tipo burocratico, economici e tecnici.

Problemi burocratici

La richiesta di un certificato deve essere fatta ad un CA come detto. Per potersi rivolgere a loro bisogna innanzitutto sapere di cosa hai bisogno e avere le informazioni da subito ben chiare. Bisogna capire bene l’inglese legale e informatico, perchè non è immediato e quasi tutte le CA sono americani/inglesi.
Fortunatamente da qualche anno si possono acquistare certificati SSL anche da rivenditori italiani, che si sono occupati di “italianizzare” la procedura, rendendola più snella e comprensibile. Personalmente preferisco register.it per tutti i servizi hosting, compreso l’acquisto di un certificato. Quantomeno se ho un dubbio posso chiamare e chiedere a loro.

Problema economico

Fortunatamente i prezzi sono in forte calo, ma bisogna tenere presente che sono comunque costi annuali e vanno rinnovati per tempo. I costi variano da certificato a certificato e per un dominio possono andare da 70€/anno a 225€/anno (prezzi di Register.it di oggi 17 gennaio 2017).

Problema tecnico

Il problema più grosso è proprio quello tecnico. Non tutti i vari hosting che ci sono in commercio permettono l’installazione di un certificato e sebbene strumenti come cPanel o Plesk abbiano delle procedure guidate e facilitate, l’operazione deve essere fatta da un sistemista che sa quello che sta facendo, perchè ci sono delle operazioni da fare PRIMA della richiesta (ti dicono cosa fare) e operazioni da fare DOPO aver ottenuto il certificato SSL. Questo perchè mentre dal piano burocratico il certificato ha dei requisiti di tipo legale (la corretta ragione sociale, per esempio) dal lato tecnico il server deve essere “presentato” al CA dandogli tutte le sue specifiche, quindi vanno creati dei file che devono essere inviati all’ente per dire “ciao, sono il Server Pippo e ospito il sito di www.topolino.it che è intestato alla ditta ACME del sig. Willy Coyote, che ha questo numero di telefono (555)012344, risponde alla mail willy@topolino.it e il tecnico è pitagora@topolino.it”. Quando la CA verifica questi dati, autorizza il server e rilascia il certificato a pitagora@topolino.it che lo inserisce nel server Pippo.
La fregatura? Se il server Pippo muore, occorre richiedere un nuovo certificato. (se muore pitagora, amen, non importa a nessuno dei sistemisti, sigh).

Let’s Encypt, libertà, legalità e fraternità dei certificati!

Da un po’ di tempo però le cose si sono rivoluzionate. Il certificato SSL è diventato quasi necessario per un sito aziendale e così le CA hanno potuto abbassare i prezzi (domanda e offerta, hai presente?) rendendo i certificati più veloci nel rilascio e snelle le procedure.

Sono nati anche i certificati Auto-firmati. Sono io (server) che li firmo e li autorizzo. In pratica è come dire “fidati di me, che sono sicuro”. Grazie. Usate gli autofirmati solo se non avete altre alternative, perchè i CLIENT non li riconosco! L’utente dovrà fare una eccezione alle regole per accettare il vostro certificato! (ah, ultimamente con iPhone non è più possibile fare eccezioni. Per me sono morti.)

Ma in mezzo a queste offerte di CA è nata una piccola stella: un ente certificato che ha deciso di evitare tutto il processo di verifica del dominio ma di rendere comunque criptate le comunicazioni tra client e server: Let’s Encrypt. Questi signori hanno deciso di generare certificati GRATUITI, funzionanti e riconosciuti dai client.

Certo, abbiamo un processo zoppo, perchè cosa me ne importa se i dati sono sicuri se li sto mandando ad un hacker o un pirata dei Caraibi? Effettivamente potrebbe essere così, ma almeno un qualcosa in più rispetto agli autofirmati lo sono, perchè comunque Let’s Encrypt li firma e li autorizza (ma tutto in automatico).

Certificato Let’s Encrypt su un server cPanel 56.x

Se dalla versione 58 i certificati Let’s Encrypt si possono installare con un clic, ci sono ancora un sacco di server con la versione del cPanel ferma alla 56.x che non si possono o si vogliono aggiornare e quindi occorre rimboccarsi le maniche e lanciare qualche comando tramite shell (o ssh).

Installare il client su CentOS 6.x e creare uno script

Per prima cosa bisogna aggiornare Phyton dalla 2.6 alla 2.7, quindi:


rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm

rpm -ivh https://rhel6.iuscommunity.org/ius-release.rpm

yum -y install git python27 python27-devel python27-pip python27-setuptools python27-virtualenv --enablerepo=ius

cd /root git clone https://github.com/letsencrypt/letsencrypt

cd /root/letsencrypt

sed -i "s|--python python2|--python python2.7|"

letsencrypt-auto ./letsencrypt-auto --verbose 

poi possiamo installare il client LetsEncrypt:

yum -y install git
cd /root
git clone https://github.com/letsencrypt/letsencrypt
cd /root/letsencrypt
./letsencrypt-auto --verbose

Ovviamente questa operazione andrà fatta solo una volta. A questo punto il client è installato e potremo richiamarlo ad ogni nuovo certificato che dobbiamo richiedere e per ogni dominio.

Creiamo uno script che ci servirà ad ogni dominio (anche questo lo faremo solo la prima volta)

creiamo un file dentro la cartella /root/letsencrypt con il comando

cd /root/letsencrypt

nano installssl.pl

Si apre l’editor e incolliamo quanto segue, cambiando “rootpass” con la passoword di root

#!/usr/local/cpanel/3rdparty/bin/perl

use strict;
use LWP::UserAgent;
use LWP::Protocol::https;
use MIME::Base64;
use IO::Socket::SSL;
use URI::Escape;

my $user = "root";
my $pass = "rootpass";

my $auth = "Basic " . MIME::Base64::encode( $user . ":" . $pass );

my $ua = LWP::UserAgent->new(
    ssl_opts   => { verify_hostname => 0, SSL_verify_mode => 'SSL_VERIFY_NONE', SSL_use_cert => 0 },
);

my $dom = $ARGV[0];

my $certfile = "/etc/letsencrypt/live/$dom/cert.pem";
my $keyfile = "/etc/letsencrypt/live/$dom/privkey.pem";
my $cafile =  "/etc/letsencrypt/live/$dom/chain.pem";

my $certdata;
my $keydata;
my $cadata;

open(my $certfh, '<', $certfile) or die "cannot open file $certfile";
    {
        local $/;
        $certdata = <$certfh>;
    }
    close($certfh);

open(my $keyfh, '<', $keyfile) or die "cannot open file $keyfile";
    {
        local $/;
        $keydata = <$keyfh>;
    }
    close($keyfh);

open(my $cafh, '<', $cafile) or die "cannot open file $cafile";
    {
        local $/;
        $cadata = <$cafh>;
    }
    close($cafh);

my $cert = uri_escape($certdata);
my $key = uri_escape($keydata);
my $ca = uri_escape($cadata);

my $request = HTTP::Request->new( POST => "https://127.0.0.1:2087/json-api/installssl?api.version=1&domain=$dom&crt=$cert&key=$key&cab=$ca" );
$request->header( Authorization => $auth );
my $response = $ua->request($request);
print $response->content;

ora rendiamolo eseguibile:

cd /root/letsencrypt/
chmod +x installssl.pl

Generare un certificato (da qui in poi per ogni dominio)

dobbiamo cambiare nello script:

email@domain.com:  con l’indirizzo del tecnico (se deve richiedere le chiavi)

la path completa del sito:  /home/cPanelUser/public_html/

e ovviamente domain.com e www.domain.com

 cd /root/letsencrypt ./letsencrypt-auto --text --agree-tos --email email@domain.com certonly --renew-by-default --webroot --webroot-path /home/cPanelUser/public_html/ -d domain.com -d www.domain.com 

questo per OGNI dominio e sotto dominio, perchè non si eredita un certificato, quindi se hai www.dominio.com e store.dominio.com, sono due certificati diversi.

Installare il certificato SSL

Fase finale: occorre installare il certificato al dominio, sfruttando quello script che abbiamo generato prima e cambiando il dominio con quello che abbiamo usato sopra.

 ./installssl.pl domain.com

La fonte degli script è cPanel: https://forums.cpanel.net/threads/how-to-installing-ssl-from-lets-encrypt.513621/ salvo errori di copia/incolla, funziona.


Pubblicato

in

da