Ciao,
come vi avevo scritto nella guida precedente in merito alla sicurezza di wodpress sono oggi a proporvi una guida per rendere sicura la parte amministrativa di wordpress, usando OpenSSL su webserver apache2 di Debian.
Inutile dirvi che esistono plugin creati appositamente per lo scopo ma dato che apache e openssl ci forniscono tutti gli strumenti necessari reputo sia meglio utilizzare questi ultimi.
wordpress mette a disposizione due modi per usare ssl aggiungendo una delle due righe seguenti nel file wp-config.php
define(‘FORCE_SSL_LOGIN’, true); –> forza l’uso di OpenSSL solo per il login
define(‘FORCE_SSL_ADMIN’, true); –> forza l’ uso di OpenSSL per il login e per la parte amministrativa
Io personalmente uso il secondo perchè lo ritengo piu’ sicuro.
Creazione certificati
Per la corretta configurazione, abbiamo bisogno di un certificato SSL che può essere creato gratuitamente da vari siti. Io ho usato StartCom ma nessuno vieta di usarne altri tipo cacert.org oppure trustico.it
Generiamo la nostra KEY e il nostro CSR
cd /etc/ssl/private
e digitate
openssl genrsa -out www.ilvostrodominio.it.key 2048
Il comando appena digitato creerà una chiave della lunghezza di 2048 bit. Potete sostituire il 2048 con 4096 se volete una chiave maggiormente sicura.
IMPORTANTE: durante la creazione della chiave, verrà richiesta una password: se la impostate, ogni qualvolta tenterete di accedere alla vostra area protetta, vi verrà chiesta la password che avete creato. Se non desiderate alcuna password, digitate enter e proseguite.
Ora che abbiamo creato la chiave, creiamo il certificato digitando:
openssl req -new -key /etc/ssl/private/www.ilvostrodominio.it.key -out www.ilvostrodominio.it.csr -sha1
Vi verranno chieste le informazioni necessarie tipo nome, città, stato etc. etc.
Prestate attenzione al campo Common Name: dev’essere identico al nome di dominio del sito. Esempio. Se il sito si chiamerà www.ilvostrodominio.it il CN dovrà essere www.ilvostrodominio.it e non solamente ilvostrodominio.it
E’ il momento di usare il certificato sul sito che abbiamo scelto che nel mio caso è StartCom
Dovete registrartvi, aggiungere il vostro dominio e scegliere le modalità di verifica.
Se scegliete “e-mail” verrà verificato l’ indirizzo e-mail postmaster@ilvostrodominio.it (o altri due indirizzi prestabiliti)
Una volta verificati, dovete copiare il contenuto del file /etc/ssl/private/www.ilvostrodominio.it.csr all’ interno del box che viene visualizzato andando su “Certification Wizard” , saltando la parte di creazione del nostro .csr (perchè l’ abbiamo già creato in precedenza)
Ora dobbiamo salvare i CA di StartSSL: per fare questo, spostiamoci nella directory /etc/ssl/certs e digitiamo
wget https://www.startssl.com/certs/ca.pem
wget https://www.startssl.com/certs/sub.class1.server.ca.pem
Configurazione di Apache2
E’ il turno di configurare il virtualhost per apache2, il mio è questo:
ServerName www.ilvostrosito.it
DocumentRoot /la/dir/di/www.ilvostrosito.it
ErrorLog /var/log/apache2/ilvostrosito.it_ssl_error_log
CustomLog /var/log/apache2/ilvostrosito.it_ssl_access_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
DirectoryIndex index.html index.htm index.php index.php4 index.php5
RewriteEngine On
# RewriteRule !wp-login(.*) - [C]
RewriteRule !^/wp-(admin|login|register)(.*) - [C]
RewriteRule ^/(.*) http://www.ilvostrosito.it/$1 [QSA,L]
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH
SSLCertificateFile /etc/ssl/certs/www.ilvostrosito.it.crt
SSLCertificateKeyFile /etc/ssl/certs/www.ilvostrosito.it.key
SSLCertificateChainFile /etc/ssl/certs/sub.class1.server.startcom.pem
SSLCACertificateFile /etc/ssl/certs/ca.pem
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
Faccio notare che la condizione di rewrite (da RewriteEngine ON a RewriteRule ^/(.*) http://www.ilvostrosito.it/$1 [QSA,L] ) l’ho inserita per fare in modo che, una volta abbondonata la parte amministrativa, il sito continui ad usare http anzichè https.
Se ora provate ad accedere alla parte amministrativa del vostro sito (www.vostrosito.it/wp-admin) vi verrà chiesto di accettare il certificato e, se tutto ha funzionato a dovere, dovreste vedere nell’ url la “s” finale di https 🙂
Errori comuni
Se nel vostro log di apache riscontrate un messaggio come questo
[warn] RSA server certificate CommonName (CN) ‘…’ does NOT match server name!?
significa che durante la creazione del certificato, avete inserito un CN diverso dal nome del sito.