User Tools

Site Tools


doc:appunti:linux:sa:ssl_cert

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 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.

doc/appunti/linux/sa/ssl_cert.txt · Last modified: 2020/10/07 08:21 by niccolo