====== Certificati SSL ======
Come generare i certificati SSL autofirmati in un sistema **Debian GNU/Linux** per i vari programmi: apache2, courier-pop, courier-imap, postfix, exim.
===== Ispezionare un certificato in formato PEM =====
Per vedere il contenuto di un file .pem (date di validità, ecc.):
openssl x509 -text -noout -in pop3d.pem
===== Ispezionare una CRL in formato PEM =====
Anche una Certificate Revocation List ha la sue date di validità, ecc. Per ispezionarla:
openssl crl -text -noout -in openvpn_crl.pem
===== Courier POP3 e IMAP =====
* Debian fornisce gli script **''mkpop3dcert''** e **''mkimapdcert''**.
* La configurazione è in **''/etc/courier/pop3d.cnf''** e **''/etc/courier/imapd.cnf''**.
* I certificati vengono salvati in **''/etc/courier/pop3d.pem''** e **''/etc/courier/imapd.pem''**.
Per allungare la durata del certificato (predefinita solo 365 giorni) e personalizzare la configurazione:
* Modificare gli script cambiando la direttiva **''-days''**, salvare in ''/usr/local/sbin/''.
* Editare i file ''.cnf'' impostando i valori richiesti.
* Eliminare i vecchi ''.pem'' ed eseguire nuovamente gli script.
===== Postfix =====
L'installazione predefinita di Postfix usa il certificato **''/etc/ssl/certs/ssl-cert-snakeoil.pem''** e la corrispondente chiave **''/etc/ssl/private/ssl-cert-snakeoil.key''**.
Noi preferiamo due file nella directory **''/etc/postfix/ssl/''**, uno con il certificato (**''postfix.crt''**) ed uno con la chiave (**''postfix.key''**). In questa **[[postfix#crittografia_tls|pagina]]** uno script in grado di generare i due file.
Editare **''/etc/postfix/main.cf''** e impostare:
# TLS parameters
smtpd_tls_cert_file=/etc/postfix/ssl/postfix.crt
smtpd_tls_key_file=/etc/postfix/ssl/postfix.key
smtpd_use_tls=yes
===== ejabber =====
La generazione del certificato è inclusa nello script di **''postinst''**, eccola con l'unica variazione sulla durata: tre anni invece di uno:
#!/bin/bash
EHOSTNAME=$(hostname -s 2>/dev/null || echo localhost)
EDOMAINNAME=$(hostname -d 2>/dev/null || echo localdomain)
openssl req -new -x509 -days 1096 -nodes -out ejabberd.pem \
-keyout ejabberd.pem > /dev/null 2>&1 <<+++
.
.
.
$EDOMAINNAME
$EHOSTNAME
ejabberd
root@$EHOSTNAME.$EDOMAINNAME
+++
===== Verificare un certificato SSL su HTTPS =====
Con il tool **openssl** è possibile verificare la possibilità di stabilire una connessione SSL con un server via HTTPS:
openssl s_client -connect www.domain.tld:443
Se la verifica funziona correttamente, l'ultima riga dell'output dovrebbe essere:
Verify return code: 0 (ok)
La mancata installazione in locale del certificato della CA invece produce questo errore:
Verify return code: 20 (unable to get local issuer certificate)
È possibile specificare manualmente il percorso del certificato con l'opzione **%%-CAfile%%**:
openssl s_client -connect www.domain.tld:443 -CAfile /usr/lib/ssl/certs/DigiCert_Global_Root_CA.pem
Ovviamente è consigliabile copiare il certificato nella posizione in cui la libreria lo trova automaticamente, anche solo con un link simbolico. Per una compilazione locale di libssl dovrebbe essere **/usr/local/ssl/cert.pem**, per una installazione di sistema invece dovrebbe essere **/usr/lib/ssl/cert.pem**.