SSL (Secure Socket Layer) è un protocollo di comunicazione cifrato e utilizza una tecnica di cifratura chiamata crittografia a chiave pubblica. Oltre a cifrare una connessione, la crittografia a chiava pubblica consente a un client di autenticare il server. Questo grazie ad un certificato firmato da terze parti (solitamente è un’organizzazione indipendente) che verifica se il proprietario del server è effettivamente chi dice di essere. Se non possedete un certificato firmato da terze parti, i clients che contatteranno il vostro server riceveranno un avviso che li informerà riguardo il vostro certificato non visionato da un’autorità riconosciuta. Per evitare questo inconveniente dovrete pagare e far firmare la vostra CSR (Certificate Signing Request) da una CA (Certification Authority). Le due più importanti sono Verisign e Thawte.
Questa procedura consente di creare facilmente un proprio certificato non firmato da terze parti:
Per prima cosa installiamo le librerie necessarie
$ sudo apt-get update && sudo apt-get install openssl
Adesso passiamo a root
$ su
Installiamo una chiave privata supponendo di trovarci nella cartella confSSL sotto la root del webserver e dando per scontato che il modulo SSL sia già incluso in Apache (se usate Apache2.0 è già incluso di default e dovete solo caricarlo)
# openssl genrsa 1024 > miachiave.key
Adesso convalidiamo la chiave creata sopra generando una CSR
# openssl req -new -key miachiave.key -out convalida.csr
Infine creiamo il certificato vero e proprio firmando la CSR con la chiave privata
# openssl req -x509 -key miachiave.key -in convalida.csr – out certificato.crts
E’ molto importante che i file appena creati possano essere letti soltanto dall’utente root.
Una volta generato il certificato possiamo utilizzarlo per i nostri hosts virtuali che utilizzano https (secure http) inserendo le seguenti direttive in ogni VirtualHost che ascolta sulla porta 443 (la porta di default):
SSLCertificateKeyFile confSSL/miachiave.key
SSLCertificateFile confSSL/certificato.crts
Se impostate all’esterno dei container VirtualHost, queste direttive consentono di utilizzare il nostro certificato per tutti gli hosts virtuali che utilizzano SSL. Essi devono però specificare questa direttiva all’interno del proprio ambito:
SSLEngine On
Non è possibile specificare questa direttiva nella configurazione generale del server. Per imporre l’utilizzo di SSL in una directory utilizzate questa direttiva all’interno dei container <Directory>
SSLRequireSSL
