# Blink Script ishuara regis

Apache SSL/TLS Mutual Authentication 1 parte 1/2. Ishuara Regis



Creazione di una CA e dei certificati server

In questo primo post vedremo com creare una CA privata e i certificati server. Nel secondo articolo invece spiegherò come generare i certificati client e configurare apache per la mutual authentication.
 Le versioni dei software usate sono:

· Apache 2.2.19
· mod_ssl e OpenSSL (0.9.8k)

Al termine della guida avremo raggiunto i seguenti obiettivi:

· Avere livelli di crittografia SSL/TLS alti o medi a livello TCP
· Creare certificati client, e richiederli per specifiche url
· Proteggere alcune URI specifiche tramite certificati

La parte centrale di questa configurazione è il protocollo SSL/TLS. SSL opera fra il il livello TCP e il livello applicativo HTTP. Il protocollo TLSv1, usato in questa configurazione, è l’implementazione standard IETF basata su SSLv3.

Ecco alcuni acronimi usati nel post:

TLS: Transport Layer Security.
SSL: Secure Sockets Layer

 Assunzioni/Prerequisiti

Questa guida assume che si stiano usando le seguenti versioni software o superiori:
Sistema Operativo
Linux/Unix standard Posix
Web Server
Apache 2.2.12 o superiore (Sni Capable)
MOD_SSL
OpenSSL 0.9.8k o superiore



· La configurazione dei DNS (si può usare il file hosts) sia corretta (hostname=FQDN, PTR records, etc.)
· Il firewall consenta l’accesso alle porte http(80) e https(443)
· Sia disponibile un computer con un browser
· Nel nostro esempio, l’FQDN e hostname sarà: s1.ssltest.net.

Configurare la propria CA (Certificate Authority)


Il primo passo per configurare un webserver sicuro con crittografia SSL/TLS è creare una propria CA. Essendo questa una configurazione particolare non useremo una CA esterna ma ci eleggeremo CA controfirmando direttamente tutti i certificati. Per eseguire queste configurazioni verranno usati gli OpenSSL tools. 

Procediamo alla creazione della CA key e del certificato CA X.509 privato in questo modo:

Crezione delle directory di lavoro:

mkdir /root/CA
chmod 0770 /root/CA
cd /root/CA

Generazione della chiave:

openssl genrsa -des3 -out test-ca.key 2048

Generating RSA private key, 2048 bit long modulus
.....................................................+++
...................................................+++
e is 65537 (0x10001)
Enter PEM pass phrase:
Verifying password - Enter PEM pass phrase:

Eliminazione della password (opzionale):

openssl rsa -in test-ca.key -out test-ca.insecure.key
o sovrascrivendola
openssl rsa -in test-ca.key -out test-ca.key

Creazione del certificato x.509:

openssl req -new -x509 -days 3650 -key test-ca.key -out test-ca.crt

Using configuration from /usr/share/ssl/openssl.cnf
Enter PEM pass phrase:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [IT]:IT
State or Province Name (full name) []:Italia
Locality Name (eg, city) []:Roma
Organization Name (eg, company) [My Company Ltd]: Test SPA
Organizational Unit Name (eg, section) []:Certificate Authority
Common Name (eg, your name or your server's hostname) []:Test SPA CA
Email Address []:user@test.it

Verifica del certificato:

openssl x509 -in test-ca.crt -text -noout

Note:
Il primo comando genera la chiave. Il secondo comando elimina la password dalla chiave, questo comando deve essere utilizzato nel caso non si volesse gestire la password ogni volta il server apache viene riavviato. Il terzo comando genera il certificato con una durata di 10 anni. Il quarto comando permette di visualizzare il certificato. Nel caso in cui si stia utilizzando una password è fondamentale salvarla in un luogo sicuro.

Creazione della chiave e del certificato per il web server:

Ora si devono creare la chiave e il certificato X.509 per il web server. Invece che crearli direttamente lo faremo attraverso una certificate request (csr), e successivamente “firmando” la certificate request con la CA key creata nella prima parte di questa guida. E’ possibile creare certificati per più server usando questa metodologia. Le chiavi private SSL/TLS devono essere di 2048 bits. E’ accettabile l’utilizzo di chiavi con una crittografia minore (1024 bits) solo per consentire la retrocompatibilità con alcuni browser più vecchi.
Generazione della chiave:

openssl genrsa -des3 -out s1-server.key 2048

Generating RSA private key, 2048 bit long modulus
....++++++
.++++++
e is 65537 (0x10001)
Enter PEM pass phrase:
Verifying password - Enter PEM pass phrase:

Eliminazione della password (opzionale):

openssl rsa -in s1-server.key -out s1-server.insecure.key
o sovrascrivendola
openssl rsa -in s1-server.key -out s1-server.key

Generazione della certificate request:

openssl req -new -key s1-server.key -out s1-server.csr

Using configuration from /usr/share/ssl/openssl.cnf
Enter PEM pass phrase:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [IT]:IT
State or Province Name (full name) []:Italia
Locality Name (eg, city) []:Roma
Organization Name (eg, company) [My Company Ltd]:Test SPA
Organizational Unit Name (eg, section) []:Web Services
Common Name (eg, your name or your server's hostname) []:s1.ssltest.net <=== Deve essere il vero FQDN del server!!!
Email Address []:i@test,it
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:it <=== Non Deve essere inserita alcuna password!!!
An optional company name []:

Generazione del certificato dalla certificate request per mezzo della della CA:

openssl x509 -req -in s1-server.csr -out s1-server.crt -sha1 -CA test-ca.crt -CAkey test-ca.key -CAcreateserial -days 3650

Signature ok
subject=……..
Getting CA Private Key
Enter PEM pass phrase:

Verifica del certificato:

openssl x509 -in s1-server.crt -text -noout

Verificare che il server name sia uguale all’FQDN che i client utilizzeranno per connettersi al sito. Proteggere le chiavi cambiandone i diritti di accesso
Modificare i diritti di accesso delle chiavi:

chmod 0400 *.key

Ora si dovranno copiare le nuove chiavi e i certificati nelle directory corrette della propria gerarchia nella nostra configurazione di esempio (/etc/httpd/conf/) :

cp s1-server.crt /etc/httpd/conf
cp s1-server.key /etc/httpd/conf
cp test-ca.crt /etc/httpd/conf

Configurare il webserver apache

Per mettere in opera le configurazioni finora effettuate sui nostri server si dovranno cambiare alcuni file di apache. Dovranno essere modificati sia il virtualhost dell’http che quello dell’https. In questa configurazione si useranno i virtualhost di default ma è possibile utilizzare un qualunque virtualhost correttamente configurato.
Le modifiche da apportare al virtualhost https dovranno essere le seguenti:

<Virtualhost *:443>
…….
# L’FQDN del server

ServerName s1.ssltest.net:443
ServerAdmin webmaster@test.it

# "high" and "medium" security key lengths.
SSLCipherSuite HIGH:MEDIUM

# Abiliati SSLv3 and TLSv1, è stato disabilitato lo SSLv2.
SSLProtocol all -SSLv2

#   Server Certificate:
SSLCertificateFile /etc/httpd/conf/ s1-server.crt

#   Server Private Key:
SSLCertificateKeyFile /etc/httpd/conf/ s1-server.key

#   Server Certificate Chain:
SSLCertificateChainFile /etc/httpd/conf/test-ca.crt

#   Certificate Authority (CA):
SSLCACertificateFile /etc/httpd/conf/test-ca.crt

# Url che richiede i certificati per l’accesso

  <Location />
        SSLRequireSSL
        SSLVerifyClient require
        SSLVerifyDepth 1
       </Location>

</Virtualhost>

Al virtual host http o alla configurazione generale di apache invece dovrà esere aggiunta la seguente regola necessaria per impedire che le url https configurate per i certificati client possano essere
richiamate tramite http.

……
  <Location />
        SSLRequireSSL
       </Location>
…..

Opzionalmente è possibile utilizzare una regola di mod_rewrite per forzare la redirect delle url http verso quelle https:

……
RewriteEngine On
   RewriteCond %{HTTPS} !=on
   RewriteRule ^(.*) https://%{SERVER_NAME} $1 [R,L]

…..

Creazione delle regole iptables (opzionale)

## Arrestiamo il serzio iptables:
service iptables stop

## Aggiungiamo le regole necessarie ad aprire le porte 80,443,22:

iptables -P INPUT ACCEPT
iptables -F
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m multiport -p tcp --dports 22,443,80  -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -L -v

## Salviamo la configurazione
/sbin/service iptables save

## Riavviamo iptables
service iptables start

Riavvio del server apache

Si dovrà procedere ora con il riavvio del server apache nel nostro caso particolare il comando eseguito è:

/etc/init.d/httpd start
Starting httpd: Apache/+++++ (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide us with the pass phrases.

Server s1.ssltest.net:443 (RSA)
Enter pass phrase:
Ok: Pass Phrase Dialog successful.
                                                           [  OK  ]

Se durante i passi precedenti non è stata disabilitata la password, ogni volta che si riavvierà il server apache sarà necessario digitarla per poter procedere.
Si dovrà poi verificare che il server sia correttamente attestato sulle porte 80 e 443:

netstat -tna
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN


Ora è possibile testare la configurazione SSL/TLS connettendosi alle url con il browser. La url nel caso specifico di questa guida sarà:

· http://s1.ssltest.net/

quando richiesto sarà possibile visualizzare e registrare il certificato SSL configurato sul webserver. 
Collegandosi invece alla URL:

· http://s1.ssltest.net/

l’accesso a questo punto ci verra negato in quanto nel browser non è ancora stato inserito il corretto certificato utente. Come creare e configurare questi certificati ve lo spieghero nella prossima parte.


Ishuara Regis

0 commenti:

Posta un commento