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