Old:Samba e OpenLDAP: creare un controller di dominio con Ubuntu Server TLS e SSL
Attenzione. Questa guida è obsoleta. Viene mantenuta sul Wiki solo per motivi di natura storica e didattica. |
TLS e SSL
Introduzione
Transport Layer Security (TLS) e il suo predecessore Secure Sockets Layer (SSL) sono dei protocolli crittografici che permettono una comunicazione sicura e una integrità dei dati su reti TCP/IP come, ad esempio, internet. TLS e SSL cifrano la comunicazione dalla sorgente alla destinazione (end-to-end) sul livello di trasporto.
Il protocollo TLS consente alle applicazioni client/server di comunicare attraverso una rete in modo tale da prevenire il 'tampering' (manomissione) dei dati, la falsificazione e l'intercettazione.
Nell'utilizzo tipico di un browser da parte di utente finale, l'autenticazione TLS è unilaterale: solo il server è autenticato (il client conosce l'identità del server), ma non vice-versa (il client rimane anonimo e non autenticato). L'autenticazione del server è molto utile per il software di navigazione e per l'utente. Il browser valida il certificato del server controllando la firma digitale dei certificati del server controllando che questa sia valida e riconosciuta da una certificate authority conosciuta utilizzando una cifratura a chiave pubblica. Dopo questa autenticazione il browser indica una connessione sicura mostrando solitamente un lucchetto in un'icona in basso a destra. Questa autenticazione, però, non è sufficiente per garantire che il sito con cui ci si è collegati sia quello richiesto. Per esserne sicuri è necessario analizzare il contenuto del certificato rilasciato e controllarne la catena di certificazione. I siti che intendono ingannare l'utente non possono utilizzare un certificato del sito che vogliono impersonare perché non hanno la possibilità di cifrare in modo valido il certificato, che include l'indirizzo, in modo tale che risulti valido alla destinazione. Solo le CA possono generare certificati validi con un'URL incorporata in modo che il confronto fra l'URL apparente e quella contenuta nel certificato possa fornire un metodo certo per l'identificazione del sito.
Molto spesso questo meccanismo non è noto agli utenti di internet ed è causa di varie frodi dovute, però, ad un incorretto utilizzo del browser non ad una debolezza del protocollo TLS.
Ora vedremo come configuare ldap e samba affinché usino l'autenticazione TLS unilaterale.
Configurazione
Per prima cosa procediamo all'installazione di gnutls-bin
:
# apt-get install gnutls-bin
Creazione Certificato
Successivamente bisognerà ottenere un certificato usando l'utility certtoll
:
- Creiamo una chiave privata per Certificate Authority (CA):
# sh -c "certtool --generate-privkey > /etc/ssl/private/cakey.pem"
- Creare il file
/etc/ssl/ca.info
, per autofirmare il CA certificate, con il seguente contenuto:
cn = server.dominio.local ca cert_signing_key
- Ora creare il CA certificate autofirmato:
# certtool --generate-self-signed --load-privkey /etc/ssl/private/cakey.pem --template /etc/ssl/ca.info --outfile /etc/ssl/certs/cacert.pem
- Generare una chiave privata per il server:
# sh -c "certtool --generate-privkey > /etc/ssl/private/server_slapd_key.pem"
- Per firmare il certificato del server con il CA certificate, creare il file
/etc/ssl/server.info
con il contenuto:
organization = Server Dominio cn = server.dominio.local tls_www_server encryption_key signing_key
- Ora creare il certificato per il server:
# certtool --generate-certificate --load-privkey /etc/ssl/private/server_slapd_key.pem --load-ca-certificate /etc/ssl/certs/cacert.pem --load-ca-privkey /etc/ssl/private/cakey.pem --template /etc/ssl/server.info --outfile /etc/ssl/certs/server_slapd_cert.pem
Modifiche di LDAP
Ora dobbiamo modificare il file cn=config.ldif
di slapd.d
affinché usi il certificato.
Creare il file /etc/ldap/tls.ldif
:
dn: cn=config add: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/ssl/certs/cacert.pem - add: olcTLSCertificateFile olcTLSCertificateFile: /etc/ssl/certs/server_slapd_cert.pem - add: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/ssl/private/server_slapd_key.pem
Inseriamo le informazioni con il seguente comando:
# ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/ldap/tls.ldif
Aprire il file /etc/default/slapd
e togliere il commento dall'opzione SLAPD_SERVICES:
SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"
Garantire accesso al certificato all'utente openldap:
# adduser openldap ssl-cert # chgrp ssl-cert /etc/ssl/private # chgrp ssl-cert /etc/ssl/private/server_slapd_key.pem # chmod 750 /etc/ssl/private/ # chmod 640 /etc/ssl/private/server_slapd_key.pem
Modificare /etc/ldap.conf
:
uri ldpas://127.0.0.1/ ssl start_tls ssl on tls_checkpeer yes tls_cacertfile /etc/ssl/certs/cacert.pem tls_cacertdir /etc/ssl/certs tls_cert /etc/ssl/certs/server_slapd_cert.pem tls_key /etc/ssl/private/server_slapd_key.pem
Configurazione Samba
Modificare la seguente voce di smb.conf
:
.... ldap ssl = start tls ....
In fine, riavviare slapd
:
# /etc/init.d/slapd restart