Apache, SSL e CaCert.Org: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
m (rimossa Jessie e Stretch/Sid)
 
(32 versioni intermedie di 9 utenti non mostrate)
Riga 1: Riga 1:
{{stub}}
{{Versioni compatibili|Squeeze|Wheezy}}
=Introduzione=
= Introduzione =
Ci avr� provato ad installare apache (o apache2) con supporto ssl si sar� trovato davanti al problema del certificato: come generarlo? che valore ha? dove posso ottenere un certificato valido? esistono soluzioni gratuite?
Chi avrà provato ad installare Apache (o Apache2) con supporto SSL si sarà trovato davanti al problema del certificato: come generarlo? Che valore ha? Dove posso ottenere un certificato valido? Esistono soluzioni gratuite?<br />
Queste sono le domande normali che si pone un utente, soprattutto guardando i prezzi esorbitanti proposti per l'acquisto di certificati [http://it.wikipedia.org/wiki/Transport_Layer_Security SSL].


Queste sono le domande normali che si pone un utente, soprattutto guardando i prezzi esorbitanti proposti per l'acquisto di certificati [http://it.wikipedia.org/wiki/SSL SSL].
Il vantaggio di avere un certificato firmato da terzi è la possibilità, per chi accede alla nostra risorsa web per la prima volta, di avere certificato il proprio dominio, evitando quindi attacchi Man In the Middle. Altrimenti potremmo benissimo ricorrere ad un certificato autogenerato e non firmato.


==Cos'� un certificato==
==Note sui certificatori SSL==
In questo articolo si fa riferimento esplicito a '''CaCert.org'''. Trattasi di una associazione che certifica, sullo stile di GPG, sul principio di [http://it.wikipedia.org/wiki/Web_of_trust Web of Trust].<br />
Pur non essendo necessario il riconoscimento per usare i servizi di CaCert questo è consigliato per usufruire di alcuni vantaggi (quali ad esempio la durata del certificato). Il principale problema di cui soffre ''CaCert'' è il fatto di non essere globalmente riconosciuto ed essere presente quindi solo in alcune distibuzioni, tra cui Debian. Questo significa che chi accede da altri sistemi operativi probabilmente non sarà in grado di verificare tramite l'ente certificatore l'autenticità del certificato, proprio siccome non dispone del certificato di CaCert all'interno del proprio browser.


==Come funziona?==
Al momento l'unica soluzione gratuita riscontrata e presente su tutti i browser e sistemi operativi è l'offerta di [https://www.startssl.com/?app=1 StartSSL free], ma sarei ben felice di conoscerne di altre.


=Generazione del certificato=
Molti certificatori SSL offrono soluzioni a costi sostenuti anche perché allegano al servizio polize assicurative sulla sicurezza offerta dal proprio certificato.
La generazione di un certificato � un po' macchinosa, ma tutto questo � a favore della sicurezza della procedura.


Per prima cosa � necessario [https://www.cacert.org/index.php?id=1&lang=it_IT registrarsi] su [http://www.cacert.org/index.php?id=0&lang=it_IT Cacert.Org]. Terminata la registrazione (confermando via email la validit� del proprio indirizzo email) siamo pronti per iniziare.
== Generazione del certificato ==
La generazione di un certificato è un po' macchinosa, ma tutto questo è a favore della sicurezza della procedura.


==Registrazione di un Dominio==
Per prima cosa è necessario [https://www.cacert.org/index.php?id=1&lang=it_IT registrarsi] su [http://www.cacert.org/index.php?id=0&lang=it_IT Cacert.Org]. Terminata la registrazione (confermando via email la validità del proprio indirizzo email) siamo pronti per iniziare.
Per poter generare un certificato necessario disporre di un dominio.  
 
* Dopo essersi ''loggati'' nel portale si verr� indirizzati nella propria pagina;
=== Registrazione di un Dominio ===
* Selezioniamo, a destra, il men� '''Domini''' e la voce '''Aggiungi''';
Per poter generare un certificato è necessario disporre di un dominio.  
* Dopo essersi ''loggati'' nel portale si verrà indirizzati nella propria pagina;
* Selezioniamo, a destra, il menù '''Domini''' e la voce '''Aggiungi''';
* Inseriamo il dominio (senza ''www.'' o altro davanti) e proseguiamo;
* Inseriamo il dominio (senza ''www.'' o altro davanti) e proseguiamo;
* Per poter generare un certificato necessario verificare che il richiedente sia effettivamente legato al dominio. Per questo motivo sono presenti degli indirizzi email predefiniti a cui inviare l'email di verifica: ''root@dominio.it'', ''hostmaster@dominio.it'', ''postmaster@dominio.it'', ''admin@lerasole.it'', ''webmaster@lerasole.it''.  
* Per poter generare un certificato è necessario verificare che il richiedente sia effettivamente legato al dominio. Per questo motivo sono presenti degli indirizzi email predefiniti a cui inviare l'email di verifica: ''root@dominio.it'', ''hostmaster@dominio.it'', ''postmaster@dominio.it'', ''admin@lerasole.it'', ''webmaster@lerasole.it''.  
* All'arrivo dell'email, confermiamo l'aggiunta del dominio.
* All'arrivo dell'email, confermiamo l'aggiunta del dominio.


==Generazione csr==
=== Generazione CSR ===
Per poter ottenere un certificato necessario avere una Richiesta di Sottoscrizione del Certificato (Certificate Signing Request, CSR). Per crearla usiamo il seguente comando:
Per poter ottenere un certificato è necessario avere una Richiesta di Sottoscrizione del Certificato (Certificate Signing Request, CSR). Per crearla usiamo il seguente comando:
<pre>
<pre>
# openssl req -nodes -new -keyout dominio.it.key -out dominio.it.csr
# openssl req -nodes -new -keyout dominio.it.key -out dominio.it.csr
Riga 29: Riga 34:
Dove, ovviamente, ''dominio.it'' rappresenta il nome del nostro dominio.
Dove, ovviamente, ''dominio.it'' rappresenta il nome del nostro dominio.


Verranno generati due file: ''dominio.it.key'', che rappresenta la chiave privata; ''dominio.it.csr'' che rappresenta la Richiesta di Sottoscrizione del Certificato.
Verranno poste le seguenti domande:
<pre>
Generating a 1024 bit RSA private key
..............++++++
..................++++++
writing new private key to 'mail.knio.it.key'
-----
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) [AU]:IT
State or Province Name (full name) [Some-State]:Verona
Locality Name (eg, city) []:Garda
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MaXeR
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:dominio.it
Email Address []:admin@dominio.it
 
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
</pre>
 
{{Box|Nota:|i dati inseriti sono fittizi, è d'obbligo sostituirli con quelli reali}}
 
Per dare una durata di tempo al certificato aggiungere al comando openssl, <code> -days xxx </code> dove xxx è il numero di giorni di validità dello stesso.
 
Ricordate però che il certificato durerà solo 6 mesi, qualsiasi numero venga immesso nel campo <code>-days xxx</code>, al termine della scadenza occorrerà rinnovare il certificato che sarà nuovamente valido per altri 6 mesi.
 
Se questa procedura non vi piace, potete farvi certificare da un Accertatore (trovate la lista nel sito cacert dopo esservi loggati): ciò vi permetterà di vedere riconosciuta la vostra identità e ottenere ulteriori benefici, compresa una maggiore durata dei certificati e la possibilità di inserire il vostro nome nei certificati per la posta elettronica.
 
Verranno generati due file: <code>dominio.it.key</code>, che rappresenta la chiave privata; <code>dominio.it.csr</code> che rappresenta la Richiesta di Sottoscrizione del Certificato.
 
{{ Warningbox | Una chiave a 1024 bit potrebbe essere vulnerabile, un avviso sulla sicurezza da CaCert potrebbe avvisarci }}
<pre>CAcert recently became aware that some of the certificates signed by CAcert pose a security
risk because they are backed by private keys that are vulnerable to attack.
 
The security issues identified are:
Private keys with a small key size. These keys are vulnerable to brute force attack.
Private keys with an unsafe exponent. These keys are vulnerable to some specialised attacks.
Private keys generated by a compromised version of OpenSSL distributed by Debian.
 
You received this email because a certificate issued to you is vulnerable:
Server Certificate, Serial 09GEF3, expiring 2011-09-14 14:36:55, CN dominio.it
 
To rectify the problem CAcert will revoke all vulnerable certificates (including yours) on 2011-07-15.
CAcert will no longer accept vulnerable certificate requests for signing. In future all Certficate
Signing Requests must be backed by private keys with a key length at least 2048 bits and no other known vulnerabilities.
 
You should submit a new Certificate Signing Request of acceptable strength as soon as possible
and replace your existing certificate.
 
If you are interested in background information on this change please refer to this document:
http://csrc.nist.gov/publications/nistpubs/800-78-3/sp800-78-3.pdf
 
Kind regards
CAcert Suport Team</pre>


==Richiesta del Certificato==
In tal caso occorre creare una chiave più robusta con il comando :
Visualizziamo il contenuto del file '''dominio.it.csr''' e copiamolo nel form contenuto in ''Certificati per i Server (Server Certificates)'', ''Nuovo''.
<pre># openssl req -nodes -newkey rsa:4096 -keyout dominio.it.key -out dominio.it.csr</pre>
Il valore 4096 può essere modificato a piacere a partire da 2048 secondo gli attuali standard.
<pre>Generating a 4096 bit RSA private key
...........................................................++
...++
writing new private key to dominio .it.key'
-----
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) [AU]:IT
State or Province Name (full name) [Some-State]:Parma
Locality Name (eg, city) []:Grugno
Organization Name (eg, company) [Internet Widgits Pty Ltd]:barabba
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []: dominio .it
Email Address []:admin@ dominio .it


Inviamo il contenuto del form e confermiamo. Al termine dell'elaborazione verr� mostrato il codice del certificato (una copia ci verr� inviata anche via email), salviamolo nel file '''dominio.it.crt'''.
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:biscottino
An optional company name []:</pre>


==Spostiamo i file sul server==
=== Richiesta del Certificato ===
Spostiamo i tre file sul server, nella directory '''/etc/apache/ssl/''' nel caso di apache, '''/etc/apache2/ssl''' nel caso di apache2.
Visualizziamo il contenuto del file <code>dominio.it.csr</code> e copiamolo nel form contenuto in ''Certificati per i Server (Server Certificates)'', ''Nuovo''.


==Verifica del Certificato==
Inviamo il contenuto del form e confermiamo. Al termine dell'elaborazione verrà mostrato il codice del certificato (una copia ci verrà inviata anche via email), salviamolo nel file <code>dominio.it.crt</code>.
Prima di configurare il server d'obbligo un controllo sulla correttezza del certificato. Per fare questo dobbiamo:
 
* Scaricare il ''root certificate'' dall'indirizzo http://www.cacert.org/certs/root.crt
=== Spostiamo i file sul server ===
* Copiarlo nella directory '''/etc/apache/ssl/''' (o '''/etc/apache2/ssl''' nel caso di apache2)
Spostiamo i tre file sul server, nella directory <code>/etc/apache/ssl/</code> nel caso di Apache, <code>/etc/apache2/ssl</code> nel caso di Apache2.
 
=== Verifica del Certificato ===
Prima di configurare il server è d'obbligo un controllo sulla correttezza del certificato. Per fare questo dobbiamo:
* Scaricare il ''root certificate'' da[http://www.cacert.org/certs/root.crt questo] indirizzo
* Copiarlo nella directory <code>/etc/apache/ssl/</code> (o <code>/etc/apache2/ssl</code> nel caso di Apache2)
* Eseguire il comando: <pre>openssl verify -CAfile root.crt -purpose sslserver dominio.it.crt</pre>
* Eseguire il comando: <pre>openssl verify -CAfile root.crt -purpose sslserver dominio.it.crt</pre>


Se tutto stato eseguito correttamente, il controllo avr� esito positivo.
Se tutto è stato eseguito correttamente, il controllo avrà esito positivo.
 
=== Rinnovo del certificato ===
Poco prima della scadenza del certificato (di solito 14 giorni ), riceverete una mail che vi comunicherà il termine del certificato, successivamente se non rinnovate il certificato, riceverete un'altra mail alcuni giorni prima della scadenza.
 
Nella mail potete trovare il link a cacert: accedete al sito e loggatevi con le vostre credenziali.
 
Nella finestra ''Certificati server/visualizza'' potete vedere i certificati da voi creati, (qui potete anche eliminare vari certificati creati per errore), individuate il certificato da aggiornare, come aiuto se ne avete più di uno potete controllare con la data di scadenza che compare a destra.
 
Spuntate il certificato da rinnovare e fate click sul pulsante ''Rinnova''.
 
In pochi secondi il certificato verrà rinnovato e vi comparirà una nuova pagina contenente il nuovo certificato.
 
Copiate il testo da BEGIN CERTIFICATE a END CERTIFICATE  e andate a sostituirlo nel file <code>apache2/ssl/vostro-certificato.crt</code> e riavviate Apache2
<pre>
# /etc/init.d/apache2 restart
</pre>
 
Ora tornate alla finestra ''certificati server/visualizza'', e verificate che la data del certificato da voi rinnovato sia cambiata.


=Apache=
Se tutto è andato bene avrete altri 6 mesi dalla data di rinnovo.
==Installazione==
 
''Apache-ssl'' rappresenta il demone Apache con il supporto per ssl abilitato. L'installazione semplice, rappresentando un pacchetto ''separato'' da apache ''normale'':
== Apache ==
=== Installazione ===
''Apache-ssl'' rappresenta il [[demone]] Apache con il supporto per SSL abilitato. L'installazione è semplice, rappresentando un pacchetto ''separato'' da Apache ''normale'':
<pre>
<pre>
# apt-get install apache-ssl
# apt-get install apache-ssl
</pre>
</pre>


==Configurazione==
=== Configurazione ===
Prima di installare i certificati consigliabile mettere mano alla configurazione generica del server, in modo da sistemare quei parametri relativi al dominio, all'amministratore e alla directory radice utilizzata da apache.
Prima di installare i certificati è consigliabile mettere mano alla configurazione generica del server, in modo da sistemare quei parametri relativi al dominio, all'amministratore e alla directory radice utilizzata da Apache.


===Modifica impostazioni base===
==== Modifica impostazioni base ====
Il file in questione � '''/etc/apache-ssl/httpd.conf'''. Le voci da adattare alla propria configurazione sono le seguenti:
Il file in questione è <code>/etc/apache-ssl/httpd.conf</code>. Le voci da adattare alla propria configurazione sono le seguenti:
; ServerName : indica il dominio al quale dovr� rispondere il server. Nel nostro caso sar� ''esempio.it''.
; ServerName : indica il dominio al quale dovrà rispondere il server. Nel nostro caso sarà ''esempio.it''.
; ServerAdmin : l'email dell'amministratore del server. Nel nostro caso ''sysadmin@esempio.it''.
; ServerAdmin : l'email dell'amministratore del server. Nel nostro caso ''sysadmin@esempio.it''.
; DocumentRoot : indica la directory radice in cui si trovano le pagine che verranno mostrate da apache. Nel nostro esempio verr� mantenuto il valore di default.
; DocumentRoot : indica la directory radice in cui si trovano le pagine che verranno mostrate da Apache. Nel nostro esempio verrà mantenuto il valore di default.


===Aggiunta del Certificato===
==== Aggiunta del Certificato ====
Il file da modificare , anche in questo caso, quello principale: '''/etc/apache-ssl/httpd.conf'''. All'interno di questo presente una sottosezione, preceduta dalla riga
Il file da modificare è, anche in questo caso, quello principale: <code>/etc/apache-ssl/httpd.conf</code>. All'interno di questo è presente una sottosezione, preceduta dalla riga:
<pre>
<pre>
# ----------------------------SSL----------------------------------
# ----------------------------SSL----------------------------------
Riga 70: Riga 184:
All'interno di questa sezione si trovano tutte le voci di configurazione del modulo SSL; quelli che ci interessano, per una configurazione ''base'' sono ''SSLCertificateFile'' e ''SSLCertificateKeyFile''.
All'interno di questa sezione si trovano tutte le voci di configurazione del modulo SSL; quelli che ci interessano, per una configurazione ''base'' sono ''SSLCertificateFile'' e ''SSLCertificateKeyFile''.


Commentiamo (o modifichiamo) quindi quelle gi� presenti ed aggiungiamo quelle relative al nostro certificato:
Commentiamo (o modifichiamo) quindi quelle già presenti ed aggiungiamo quelle relative al nostro certificato:
<pre>
<pre>
SSLCertificateFile /etc/apache-ssl/ssl/esempio.it.crt
SSLCertificateFile /etc/apache-ssl/ssl/esempio.it.crt
Riga 81: Riga 195:
</pre>
</pre>


=Apache2=
== Apache2 ==
==Installazione==
=== Installazione ===
L'installazione di apache2 � semplicissima:
L'installazione di Apache2 è semplicissima:
<pre>
<pre>
# apt-get install apache2
# apt-get install apache2
</pre>
</pre>


==Attivazione del supporto SSL==
=== Attivazione del supporto SSL ===
Per poter usare SSL in apache2 � necessario attivarlo (visto che non presente un pacchetto apposito come ''apache-ssl''):
Per poter usare SSL in Apache2 è necessario attivarlo (visto che non è presente un pacchetto apposito come ''apache-ssl''):
<pre>
<pre>
# a2enmod ssl
# a2enmod ssl
Riga 95: Riga 209:
provvede ad attivare il supporto per SSL.
provvede ad attivare il supporto per SSL.


==Creazione VirtualHost==
=== Creazione VirtualHost ===
Dobbiamo, ora, creare un VirtualHost che sia in ascolto sulla porta 443.
Dobbiamo, ora, creare un VirtualHost che sia in ascolto sulla porta 443.


Prima di procedere, per�, dobbiamo modificare il comportamento di Apache relativamente ai ''NameVirtualHost''.  
Prima di procedere, però, dobbiamo modificare il comportamento di Apache relativamente ai ''NameVirtualHost''.  


Modifichiamo il file '''/etc/apache2/apache.conf''' e aggiungiamo, prima di  
Modifichiamo il file <code>/etc/apache2/apache.conf</code> e aggiungiamo, prima di  
<pre>
<pre>
Include /etc/apache2/sites-enabled/[^.#]*
Include /etc/apache2/sites-enabled/[^.#]*
Riga 109: Riga 223:
NameVirtualHost *:443
NameVirtualHost *:443
</pre>
</pre>
e assicuriamoci che l'opzione ''NameVirtualHost *'' sia commentata o rimossa dal file '''/etc/apache2/sites-available/default'''.
e assicuriamoci che l'opzione ''NameVirtualHost *'' sia commentata o rimossa dal file <code>/etc/apache2/sites-available/default</code>.


Modifichiamo tutti i VirtualHost aggiungendo l'indicazione delle porte (ad esempio: ''<VirtualHost *>'' diventa ''<VirtualHost *:80>'').
Modifichiamo tutti i VirtualHost aggiungendo l'indicazione delle porte (ad esempio: ''<VirtualHost *>'' diventa ''<VirtualHost *:80>'').


Ora creiamo un nuovo file, in ''/etc/apache2/sites-available''' che chiameremo '''dominio.it-ssl''', ed utilizziamo il seguente schema:
Ora creiamo un nuovo file, in <code>/etc/apache2/sites-available</code> che chiameremo '''dominio.it-ssl''', ed utilizziamo il seguente schema:
<pre>
<VirtualHost *:443>
        SSLEngine On
        ServerName dominio.it
        ServerAdmin admin@dominio.it
        DocumentRoot /var/www
 
        ErrorLog /var/log/apache2/dominio.it-ssl_error.log
        CustomLog /var/log/apache2/dominio.it-ssl_access.log combined
</VirtualHost>
</pre>
 
ovviamente adattando le varie opzioni alla situazione reale.
 
Ora provvediamo ad attivarlo:
<pre>
# a2ensite dominio.it-ssl
</pre>
 
=== Aggiunta Certificati ===
I certificati, in questo caso, verranno aggiunti in un file a parte: <code>/etc/apache2/conf.d/ssl.conf</code> con il seguente contenuto:
<pre>
<pre>
SSLCertificateFile ssl/dominio.it.crt
SSLCertificateKeyFile ssl/dominio.it.key
SSLCertificateChainFile ssl/root.crt
</pre>
</pre>


==Aggiunta Certificati==
Per applicare le modifiche è sufficiente riavviare Apache:
<pre>
# /etc/init.d/apache2 restart
</pre>


=Test di funzionamento=


=Considerazioni=
In alternativa è possibile inserire tali direttive all'interno del file di configurazione stesso del sito <code>/etc/apache2/site-available/mio-sito</code>.
==Limitazioni nell'utilizzo di VirtualHost==


==Diffusione di CaCert==
== Test di funzionamento ==
Il miglior test è forse il più semplice: aprire un browser e collegarsi all'indirizzo https://esempio.it ;-)


==Pruomuovere CaCert==
== Considerazioni ==
=== Limitazioni nell'utilizzo di VirtualHost ===
La limitazione più ''pesante'' che si può notare è l'impossibilità di utilizzare più di un certificato per la stessa accoppiata ''ip:porta''. Il motivo è semplice: i dati inviati sono cifrati, quindi è impossibile, per Apache, riuscire ad estrapolare il ''ServerName''... Quindi viene usata l'accoppiata ''ip:porta'' per definirlo.


=== Diffusione di CaCert ===
CaCert inizia ad essere inserito, come certificato root, anche nei vari browser, evidenziando che l'attenzione verso questo progetto sta salendo. Non resta che adottarlo ed, eventualmente, fare richiesta agli sviluppatori del nostro browser preferito affinché CaCert venga inclusa.


=Bookmark=
== Link ==
[http://www.cacert.org '''CaCert.Org''']
[http://www.cacert.org '''CaCert.Org''']
{{Autori
|Autore =[[Utente: MaXeR|MaXeR]]
|Estesa_da =
: risca 18:56, 20 apr 2014 (CEST)
|Verificata_da =
: mm-barabba
: risca 21:26, 11 apr 2014 (CEST)
|Numero_revisori = 2
}}
[[Categoria:Web server]]
[[Categoria:Crittografia]]

Versione attuale delle 18:57, 29 apr 2015

Edit-clear-history.png Attenzione. Questa guida è da considerarsi abbandonata, per via del tempo trascorso dall'ultima verifica.

Potrà essere resa obsoleta, previa segnalazione sul forum, se nessuno si propone per l'adozione.


Debian-swirl.png Versioni Compatibili

Debian 6 "squeeze"
Debian 7 "wheezy"

Introduzione

Chi avrà provato ad installare Apache (o Apache2) con supporto SSL si sarà trovato davanti al problema del certificato: come generarlo? Che valore ha? Dove posso ottenere un certificato valido? Esistono soluzioni gratuite?
Queste sono le domande normali che si pone un utente, soprattutto guardando i prezzi esorbitanti proposti per l'acquisto di certificati SSL.

Il vantaggio di avere un certificato firmato da terzi è la possibilità, per chi accede alla nostra risorsa web per la prima volta, di avere certificato il proprio dominio, evitando quindi attacchi Man In the Middle. Altrimenti potremmo benissimo ricorrere ad un certificato autogenerato e non firmato.

Note sui certificatori SSL

In questo articolo si fa riferimento esplicito a CaCert.org. Trattasi di una associazione che certifica, sullo stile di GPG, sul principio di Web of Trust.
Pur non essendo necessario il riconoscimento per usare i servizi di CaCert questo è consigliato per usufruire di alcuni vantaggi (quali ad esempio la durata del certificato). Il principale problema di cui soffre CaCert è il fatto di non essere globalmente riconosciuto ed essere presente quindi solo in alcune distibuzioni, tra cui Debian. Questo significa che chi accede da altri sistemi operativi probabilmente non sarà in grado di verificare tramite l'ente certificatore l'autenticità del certificato, proprio siccome non dispone del certificato di CaCert all'interno del proprio browser.

Al momento l'unica soluzione gratuita riscontrata e presente su tutti i browser e sistemi operativi è l'offerta di StartSSL free, ma sarei ben felice di conoscerne di altre.

Molti certificatori SSL offrono soluzioni a costi sostenuti anche perché allegano al servizio polize assicurative sulla sicurezza offerta dal proprio certificato.

Generazione del certificato

La generazione di un certificato è un po' macchinosa, ma tutto questo è a favore della sicurezza della procedura.

Per prima cosa è necessario registrarsi su Cacert.Org. Terminata la registrazione (confermando via email la validità del proprio indirizzo email) siamo pronti per iniziare.

Registrazione di un Dominio

Per poter generare un certificato è necessario disporre di un dominio.

  • Dopo essersi loggati nel portale si verrà indirizzati nella propria pagina;
  • Selezioniamo, a destra, il menù Domini e la voce Aggiungi;
  • Inseriamo il dominio (senza www. o altro davanti) e proseguiamo;
  • Per poter generare un certificato è necessario verificare che il richiedente sia effettivamente legato al dominio. Per questo motivo sono presenti degli indirizzi email predefiniti a cui inviare l'email di verifica: root@dominio.it, hostmaster@dominio.it, postmaster@dominio.it, admin@lerasole.it, webmaster@lerasole.it.
  • All'arrivo dell'email, confermiamo l'aggiunta del dominio.

Generazione CSR

Per poter ottenere un certificato è necessario avere una Richiesta di Sottoscrizione del Certificato (Certificate Signing Request, CSR). Per crearla usiamo il seguente comando:

# openssl req -nodes -new -keyout dominio.it.key -out dominio.it.csr

Dove, ovviamente, dominio.it rappresenta il nome del nostro dominio.

Verranno poste le seguenti domande:

Generating a 1024 bit RSA private key
..............++++++
..................++++++
writing new private key to 'mail.knio.it.key'
-----
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) [AU]:IT
State or Province Name (full name) [Some-State]:Verona
Locality Name (eg, city) []:Garda
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MaXeR
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:dominio.it
Email Address []:admin@dominio.it

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Info.png Nota:
i dati inseriti sono fittizi, è d'obbligo sostituirli con quelli reali


Per dare una durata di tempo al certificato aggiungere al comando openssl, -days xxx dove xxx è il numero di giorni di validità dello stesso.

Ricordate però che il certificato durerà solo 6 mesi, qualsiasi numero venga immesso nel campo -days xxx, al termine della scadenza occorrerà rinnovare il certificato che sarà nuovamente valido per altri 6 mesi.

Se questa procedura non vi piace, potete farvi certificare da un Accertatore (trovate la lista nel sito cacert dopo esservi loggati): ciò vi permetterà di vedere riconosciuta la vostra identità e ottenere ulteriori benefici, compresa una maggiore durata dei certificati e la possibilità di inserire il vostro nome nei certificati per la posta elettronica.

Verranno generati due file: dominio.it.key, che rappresenta la chiave privata; dominio.it.csr che rappresenta la Richiesta di Sottoscrizione del Certificato.

Warning.png ATTENZIONE
Una chiave a 1024 bit potrebbe essere vulnerabile, un avviso sulla sicurezza da CaCert potrebbe avvisarci


CAcert recently became aware that some of the certificates signed by CAcert pose a security
risk because they are backed by private keys that are vulnerable to attack.

The security issues identified are:
Private keys with a small key size. These keys are vulnerable to brute force attack.
Private keys with an unsafe exponent. These keys are vulnerable to some specialised attacks.
Private keys generated by a compromised version of OpenSSL distributed by Debian.

You received this email because a certificate issued to you is vulnerable:
Server Certificate, Serial 09GEF3, expiring 2011-09-14 14:36:55, CN dominio.it

To rectify the problem CAcert will revoke all vulnerable certificates (including yours) on 2011-07-15.
CAcert will no longer accept vulnerable certificate requests for signing. In future all Certficate
Signing Requests must be backed by private keys with a key length at least 2048 bits and no other known vulnerabilities.

You should submit a new Certificate Signing Request of acceptable strength as soon as possible
and replace your existing certificate.

If you are interested in background information on this change please refer to this document:
http://csrc.nist.gov/publications/nistpubs/800-78-3/sp800-78-3.pdf

Kind regards
CAcert Suport Team

In tal caso occorre creare una chiave più robusta con il comando :

# openssl req -nodes -newkey rsa:4096 -keyout dominio.it.key -out dominio.it.csr

Il valore 4096 può essere modificato a piacere a partire da 2048 secondo gli attuali standard.

Generating a 4096 bit RSA private key
...........................................................++
...++
writing new private key to dominio .it.key'
-----
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) [AU]:IT
State or Province Name (full name) [Some-State]:Parma
Locality Name (eg, city) []:Grugno
Organization Name (eg, company) [Internet Widgits Pty Ltd]:barabba
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []: dominio .it
Email Address []:admin@ dominio .it

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:biscottino
An optional company name []:

Richiesta del Certificato

Visualizziamo il contenuto del file dominio.it.csr e copiamolo nel form contenuto in Certificati per i Server (Server Certificates), Nuovo.

Inviamo il contenuto del form e confermiamo. Al termine dell'elaborazione verrà mostrato il codice del certificato (una copia ci verrà inviata anche via email), salviamolo nel file dominio.it.crt.

Spostiamo i file sul server

Spostiamo i tre file sul server, nella directory /etc/apache/ssl/ nel caso di Apache, /etc/apache2/ssl nel caso di Apache2.

Verifica del Certificato

Prima di configurare il server è d'obbligo un controllo sulla correttezza del certificato. Per fare questo dobbiamo:

  • Scaricare il root certificate daquesto indirizzo
  • Copiarlo nella directory /etc/apache/ssl/ (o /etc/apache2/ssl nel caso di Apache2)
  • Eseguire il comando:
    openssl verify -CAfile root.crt -purpose sslserver dominio.it.crt

Se tutto è stato eseguito correttamente, il controllo avrà esito positivo.

Rinnovo del certificato

Poco prima della scadenza del certificato (di solito 14 giorni ), riceverete una mail che vi comunicherà il termine del certificato, successivamente se non rinnovate il certificato, riceverete un'altra mail alcuni giorni prima della scadenza.

Nella mail potete trovare il link a cacert: accedete al sito e loggatevi con le vostre credenziali.

Nella finestra Certificati server/visualizza potete vedere i certificati da voi creati, (qui potete anche eliminare vari certificati creati per errore), individuate il certificato da aggiornare, come aiuto se ne avete più di uno potete controllare con la data di scadenza che compare a destra.

Spuntate il certificato da rinnovare e fate click sul pulsante Rinnova.

In pochi secondi il certificato verrà rinnovato e vi comparirà una nuova pagina contenente il nuovo certificato.

Copiate il testo da BEGIN CERTIFICATE a END CERTIFICATE e andate a sostituirlo nel file apache2/ssl/vostro-certificato.crt e riavviate Apache2

# /etc/init.d/apache2 restart

Ora tornate alla finestra certificati server/visualizza, e verificate che la data del certificato da voi rinnovato sia cambiata.

Se tutto è andato bene avrete altri 6 mesi dalla data di rinnovo.

Apache

Installazione

Apache-ssl rappresenta il demone Apache con il supporto per SSL abilitato. L'installazione è semplice, rappresentando un pacchetto separato da Apache normale:

# apt-get install apache-ssl

Configurazione

Prima di installare i certificati è consigliabile mettere mano alla configurazione generica del server, in modo da sistemare quei parametri relativi al dominio, all'amministratore e alla directory radice utilizzata da Apache.

Modifica impostazioni base

Il file in questione è /etc/apache-ssl/httpd.conf. Le voci da adattare alla propria configurazione sono le seguenti:

ServerName
indica il dominio al quale dovrà rispondere il server. Nel nostro caso sarà esempio.it.
ServerAdmin
l'email dell'amministratore del server. Nel nostro caso sysadmin@esempio.it.
DocumentRoot
indica la directory radice in cui si trovano le pagine che verranno mostrate da Apache. Nel nostro esempio verrà mantenuto il valore di default.

Aggiunta del Certificato

Il file da modificare è, anche in questo caso, quello principale: /etc/apache-ssl/httpd.conf. All'interno di questo è presente una sottosezione, preceduta dalla riga:

# ----------------------------SSL----------------------------------

All'interno di questa sezione si trovano tutte le voci di configurazione del modulo SSL; quelli che ci interessano, per una configurazione base sono SSLCertificateFile e SSLCertificateKeyFile.

Commentiamo (o modifichiamo) quindi quelle già presenti ed aggiungiamo quelle relative al nostro certificato:

SSLCertificateFile /etc/apache-ssl/ssl/esempio.it.crt
SSLCertificateKeyFile /etc/apache-ssl/ssl/esempio.it.key

Salviamo il file e riavviamo apache-ssl.

# /etc/init.d/apache-ssl restart (o reload)

Apache2

Installazione

L'installazione di Apache2 è semplicissima:

# apt-get install apache2

Attivazione del supporto SSL

Per poter usare SSL in Apache2 è necessario attivarlo (visto che non è presente un pacchetto apposito come apache-ssl):

# a2enmod ssl

provvede ad attivare il supporto per SSL.

Creazione VirtualHost

Dobbiamo, ora, creare un VirtualHost che sia in ascolto sulla porta 443.

Prima di procedere, però, dobbiamo modificare il comportamento di Apache relativamente ai NameVirtualHost.

Modifichiamo il file /etc/apache2/apache.conf e aggiungiamo, prima di

Include /etc/apache2/sites-enabled/[^.#]*

le seguenti righe:

NameVirtualHost *:80
NameVirtualHost *:443

e assicuriamoci che l'opzione NameVirtualHost * sia commentata o rimossa dal file /etc/apache2/sites-available/default.

Modifichiamo tutti i VirtualHost aggiungendo l'indicazione delle porte (ad esempio: <VirtualHost *> diventa <VirtualHost *:80>).

Ora creiamo un nuovo file, in /etc/apache2/sites-available che chiameremo dominio.it-ssl, ed utilizziamo il seguente schema:

<VirtualHost *:443>
        SSLEngine On
        ServerName dominio.it
        ServerAdmin admin@dominio.it
        DocumentRoot /var/www

        ErrorLog /var/log/apache2/dominio.it-ssl_error.log
        CustomLog /var/log/apache2/dominio.it-ssl_access.log combined
</VirtualHost>

ovviamente adattando le varie opzioni alla situazione reale.

Ora provvediamo ad attivarlo:

# a2ensite dominio.it-ssl

Aggiunta Certificati

I certificati, in questo caso, verranno aggiunti in un file a parte: /etc/apache2/conf.d/ssl.conf con il seguente contenuto:

SSLCertificateFile ssl/dominio.it.crt
SSLCertificateKeyFile ssl/dominio.it.key
SSLCertificateChainFile ssl/root.crt

Per applicare le modifiche è sufficiente riavviare Apache:

# /etc/init.d/apache2 restart


In alternativa è possibile inserire tali direttive all'interno del file di configurazione stesso del sito /etc/apache2/site-available/mio-sito.

Test di funzionamento

Il miglior test è forse il più semplice: aprire un browser e collegarsi all'indirizzo https://esempio.it ;-)

Considerazioni

Limitazioni nell'utilizzo di VirtualHost

La limitazione più pesante che si può notare è l'impossibilità di utilizzare più di un certificato per la stessa accoppiata ip:porta. Il motivo è semplice: i dati inviati sono cifrati, quindi è impossibile, per Apache, riuscire ad estrapolare il ServerName... Quindi viene usata l'accoppiata ip:porta per definirlo.

Diffusione di CaCert

CaCert inizia ad essere inserito, come certificato root, anche nei vari browser, evidenziando che l'attenzione verso questo progetto sta salendo. Non resta che adottarlo ed, eventualmente, fare richiesta agli sviluppatori del nostro browser preferito affinché CaCert venga inclusa.

Link

CaCert.Org




Guida scritta da: MaXeR Swirl-auth60.png Debianized 60%
Estesa da:
risca 18:56, 20 apr 2014 (CEST)
Verificata da:
mm-barabba
risca 21:26, 11 apr 2014 (CEST)

Verificare ed estendere la guida | Cos'è una guida Debianized