Come tutti gli sviluppatori web sanno, al fine di far girare gli script che necessitano di linguaggi lato server come PHP e MySQL è necessario installare un web server locale sulla propria macchina. Un’operazione piuttosto semplice se ci si affida a software conosciuti come Xampp, Mamp o WampServer, appena più complicata nel caso si decida per un’installazione manuale (una recente guida scritta sul blog, spiega come fare passo per passo).
Veniamo al punto: ci sono progetti di siti e applicazioni web, per esempio gli e-commerce o tutti quei siti dove l’utente trasmette dati sensibili, che necessitano di un ambiente sicuro, ovvero di una cifratura SSL per lo scambio di dati, ma come facciamo a configurarne uno sulla nostra macchina locale? Come otteniamo un indirizzo che cominci con https:// al posto del più comune http://?
Per fortuna ci viene in aiuto OpenSSL una libreria Open Source scritta in linguaggio C che implementa le principali funzioni crittografiche.
In questa guida creeremo un virtual host di Apache su Windows che scambia dati crittografati con il client utilizzando il protocollo Https/SSL.
Il primo passo consiste nell’apertura di un Prompt dei comandi, poi ci spostiamo nella cartella bin dell’installazione di Apache, che nel mio caso si trova al percorso C:\Apache24\bin, ma potrebbe cambiare da un’installazione ad un’altra.
cd C:\Apache24\bin
Impostiamo due variabili d’ambiente che ci serviranno durante la configurazione di SSL
set OPENSSL_CONF=C:\Apache24\conf\openssl.cnf set RANDFILE=C:\Apache24\bin\.rnd
e richiediamo il certificato
openssl req -new -out server.csr
Alla richiesta di rilascio del certificato dovremo inserire una password associata alla chiave privata ed una serie di campi che identificano la provenienza e la proprietà del certificato, tra questi nel campo Common name andremo ad inserire il nome di dominio associato al certificato.
Ora possiamo generare la chiave con il comando
openssl rsa -in privkey.pem -out server.key
ed il certificato con validità di un anno
openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 365
Il lavoro da Prompt dei comandi è terminato, possiamo chiudere il prompt e spostare i file server.crt e server.key appena creati dalla cartella C:\Apache24\bin alla cartella C:\Apache24\conf.
In questa cartella troveremo il file httpd.conf, lo apriamo con un editor testuale e ci assicuriamo che le seguenti righe all’interno di esso siano decommentate, in caso contrario provvediamo ad eliminare il segno # all’inizio di ognuna di esse
Include conf/extra/httpd-ssl.conf LoadModule ssl_module modules/mod_ssl.so LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
Salviamo e chiudiamo il file.
Manca poco, ci rimane solamente da configurare la cartella che ospiterà il nostro sito sicuro. Per comodità, ho creato una cartella nel percorso C:\Apache24\htdocs\testssl.locl e due cartelle all’interno di essa: una denominata cert nella quale ho copiato i file server.crt e server.key creati precedentemente tramite lo script OpenSSL e un’altra logs dove verranno scritti i log relativi al sito.
Apriamo con un editor testuale il file C:\Apache24\conf\extra\httpd-vhosts.conf e come descritto nell’articolo che spiegava come configurare un Virtual Host su Apache, aggiungiamo le seguenti righe per continuare a garantire il normale funzionamento della cartella htdocs
<VirtualHost *:80> DocumentRoot "C:/Apache24/htdocs" ServerName localhost </VirtualHost>
e queste altre per creare il virtual host testssl.locl che ospiterà i file del nostro sito sicuro
<VirtualHost _default_:443> ServerAdmin info@testssl.locl DocumentRoot "C:/Apache24/htdocs/testssl.locl" ServerName testssl.locl ServerAlias www.testssl.locl ErrorLog "C:/Apache24/htdocs/testssl.locl/logs/error.log" CustomLog "C:/Apache24/htdocs/testssl.locl/logs/access.log" common SSLEngine on SSLCertificateFile "C:/Apache24/htdocs/testssl.locl/cert/server.crt" SSLCertificateKeyFile "C:/Apache24/htdocs/testssl.locl/cert/server.key" <Directory "C:/Apache24/htdocs/testssl.locl"> DirectoryIndex index.html index.php Require all granted AllowOverride all </Directory> </VirtualHost>
Salviamo e chiudiamo il file. Apriamo il file C:\Windows\System32\drivers\etc\hosts (attenzione: il file necessita di essere aperto con privilegi di amministrazione per potere essere modificato) e aggiungiamo le seguenti righe
127.0.0.1 testssl.locl 127.0.0.1 www.testssl.locl
Salviamo e chiudiamo anche questo file e avviamo Apache.
Creiamo un file index.php all’interno della cartella testssl.locl con dentro la riga <?php phpinfo(); ?>
Se tutto è andato a buon fine, collegandoci con un browser all’indirizzo https://testssl.locl/ visualizzeremo una schermata simile alla seguente
Come ci viene segnalato dalla barra degli indirizzi del browser, il certificato non è attendibile in quanto non autorizzato da alcun ente preposto, ma possiamo comunque utilizzare l’host per lo sviluppo locale in tutta tranquillità.