Probando postfix en Centos 5.5 Parte 2

*.Vamos a ver un poco algunas configuraciones extras.*
Hasta ahora solo vimos alguna parte de las configuraciones basicas de Postfix que permiten a nuestros usuarios locales enviar y recibir correos electronicos, sin embargo tambien tenemos otras facetas que hacen un entorno mas seguro:

* Encriptacionn: aumenta la seguridad de la transmision del correo
* Autentificacion: nos garantiza que solo aquellos usuarios apropiados y autenticados son los que puedan usar nuestro correo.

Utilizando encriptacion:

Podemos encriptar nuestra transmision de correo mediante el protocolo TLS[1] en donde dicho protocolo es el sucesor de SSL[1]
Seguramente ya tuvieron contacto con SSL al utilizar sitios web que utilizan HTTPS,muchas de ellas utilizan el antiguo protocolo SSL pero otras tienen TLS funcionando por debajo de este.

Dos de funciones que nos proporciona que nos van a importar:

*Evita accesos no deseados al contenido de nuestro correo.
*Encripta la comunicacion entre el cliente y el servidor.

Vamos a explicar un poco acerca de TLS y los certificados:

El tema lleva mucha profundidad pero vamos a ver algunos conceptos basicos para entender que sucede. Ambos (TLS y SSL) utilizan certificados digitales con un tipo de criptografia llamada “encriptacion de clave publica” en donde esta funciona con dos claves, una publica que esta diponible para todos y la otra es la clavees la privadaque se guarda en el servidor y se mantiene en secreto.
Todo lo que encriptemos con la clave publica se va a desencriptar con la clave privada.
Cuando utilizemos TLS nuestro certificado digital es la clave publica del servidor que funciona como si fuera nuestro documento de identidad dado que va a identificar al servidor que nos conectemos.
Al conectarnos a un servidor con HTTPS lo que hace nuestro navegador es aceptar ese certificado digital en donde nos dice quien es el servidor acreditandonos su identidad. Dichos certficados poseen caducidad asi que hay que prestar atencion.
No podemos dejar de nombrar que cada uno de estos certificados pueden contener una referencia hacia un CA (Autoridad Certificadora).
¿Que es esto? Una CA es un mecanismo que emite certificados en donde posee un certificado especial llamado “certificado raiz” que se utiliza para poder validar la veracidad del certificado que nos representa al servidor.
Dichos certificados Raiz suelen encontrarse o estar incorporados en los clientes que se conectan a los servidores. Un ejemplo tipico es un navegador que tendra una coleccion de certificados raiz CA conocidos.

Podriamos Resumir esto Asi:
1- Nuestro cliente se conecta a un servidor y pregunta por el certicado.
2- Dicho servidor nos va a mostrar su certificado.
3- Nuestro cliente controla la referencia para un certificado raiz.
4- Nuestro cliente usa el certificado raiz que tiene para poder corroborar que el certificado sea genuino.
5- Ahora si nuestro cliente valida este intercambio ya estamos en mediode una comunicacion cifrada entre un cliente y un servidor.

Nota: suele pasar que nuestro cliente no esta seguro de la validez del certificado entonces nos pide nuestra confirmacion para continuar.

Para ahondar un poco mas sobre el tema tenemos distintos tipos de certficados:

* Certificados emitidos por una CA comercial
* Certificados emitidos por una CA no comercial
* Certificados emitidos por una CA autogestionada
* Certificados autofirmados

Lo mas complicado es que tipo de certificados queremos elegir …

*.Vamos a crear nuestros certificados TLS para nuestro caso.*

Vamos a necesitar dos certificados para TLS
* Un certificado de servidor.
* Certificado de raiz de CA

Vamos a comenzar haciendo el primero:
Aca en este primer paso se genera una clave de servidor y una CSR (Certificate signing request, Peticion de firma de certificado). Estos pasos serian para generarun certificado de una CA comercial o autogestionada.
Dicho proceso va a crear nuestra clave privada y una CSR para luego ser enviada a nuestra CA o alguna CA comercial.
Con este proceso estamos confirmando la identidad de un servidor por el cual el cliente ya va a poder confirmar su veracidad.
Vamos a utilizar openssl para generar nuestras claves y peticiones.

Manos a la obra !!

[root@mail ~]# openssl req -new -newkey rsa:4096 -nodes -keyout mail.villadalmine.com.key -out mail.villadalmine.com.req
Generating a 4096 bit RSA private key
…………………………………..++
…………………………………………………………………………………………………………………………………………………………………………………………………………………………………….++
writing new private key to ‘mail.villadalmine.com.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) [GB]:AR
State or Province Name (full name) [Berkshire]:BSAS
Locality Name (eg, city) [Newbury]:CAMPANA
Organization Name (eg, company) [My Company Ltd]:ITRESTAURACION
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server’s hostname) []:mail.villadalmine.com
Email Address []:postmaster@villadalmine.com

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:educacionit
An optional company name []:
[root@mail ~]#

[root@mail ~]# ls -l mail*
-rw-r--r-- 1 root root 3243 Sep 19 14:38 mail.villadalmine.com.key
-rw-r--r-- 1 root root 1797 Sep 19 14:38 mail.villadalmine.com.req
[root@mail ~]# pwd
/root
[root@mail ~]

Vamos a ver paso por paso los parametros pasados:
Usamos openssl para generar una clave privada utilizando cifrado RSA y un CSR.
Para generar la clave CSR utilizamos las opciones req y -new.
-nodes le decimos que no encripte la nueva clave
-keyout a donde tiene que escribir la clave
-out donde debe escribir la peticion (CSR)

Cuando llega el momento que nos pide datos ahi estamos en la parte de la creacion de la peticion en donde nos pedira cierta informacion acerca de nuestro certificado.Para saltear y usar valores por defecto apretar enter.
Luego nos ira pidiendo datos:

Country Name (2 letter code) [GB]:AR
State or Province Name (full name) [Berkshire]:BSAS
Locality Name (eg, city) [Newbury]:CAMPANA
Organization Name (eg, company) [My Company Ltd]:ITRESTAURACION
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:mail.villadalmine.com
Email Address []:postmaster@villadalmine.com

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

Como ven son todos datos que van a apareceran cuando algun cliente pregunte por este.
Traten de poner nombre significativos porque si desean que lo firme una CA comercial la situacion cambia.
Prestar atencion al nombre comun que le damos al certificado (Common Name) porque si especificamos un nombre incorrecto se producira un error debido a que el servidor y el nombre del certificado son distintos.
Como vimos mas arriba los certificados que crea son dos.
Nuestro siguiente paso es firmar nuestra CSR contra alguna CA. Como nosotros vamos a ser nuestra CA autofirmante no vamos a tener problemas :). Si no deberiamos suministrar nuestro archivo .req a la CA comercial y bueno los pasos cambian..

*.Crear nuestra propioa Autoridad Certificadora.*

Vamos a generar las rutas necesarias para crear nuestra CA.

[root@mail ~]# cd /etc
[root@mail etc]# mkdir /etc/CA
[root@mail etc]# mkdir /etc/CA/{private,newcerts}
[root@mail etc]# chown -R root:root /etc/CA
[root@mail etc]# chmod 0700 /etc/CA/private
[root@mail etc]# echo '01' | tee /etc/CA/serial
01
[root@mail etc]# touch /etc/CA/index.txt
[root@mail etc]#

Aca vemos que el directorio creado private contendra la clave privada de la CA y el directorio newcerts tendra una copia de cada certificado firme nuestra CA.
Tenemos que tener cuidado acerca de estos directorios es por eso que lo hacemos dueño a root y le damos permisos solo a el en /etc/CA/private dado que estan nuestras claves privadas.
Luego con los dos comandos ultimos lo que hacemos es crear una base de datos asi podremos almacenar los detalles de los certificados firmados dado que cada certificado emitido por CA poseee un numero de serie unico.
El archivo index.txt contiene una lista de los certificados gestionados por nuestra CA.

Luego nos faltan algunos pasos mas:
[root@mail etc]# cp /etc/pki/tls/openssl.cnf /etc/CA
Hicimos una copia de la configuracion de openssl para luego cambiar una linea:

[ CA_default ]

dir             = ../../CA              # Where everything is kept

La cambiamos por esta otra:

[ CA_default ]

dir             = .             # Where everything is kept 

Como ven lo que le estamos diciendo es que ahora busque la configuracion en otro lado y es justo donde estamos parados /etc/CA

*.Ahora lo que vamos hacer es crear un certificado autofirmado y una clave privada para nuestro CA.*

[root@mail ~]# cd /etc/CA/
[root@mail CA]# openssl req -new -x509 -newkey rsa:4096 -keyout private/cakey.pem -out cacert.pem -days 3650 -extensions v3_ca -config ./openssl.cnf
Generating a 4096 bit RSA private key
……………………………………++
…^[[3~………………………………………………++
writing new private key to ‘private/cakey.pem’
Enter PEM pass phrase:
Verifying – Enter PEM pass phrase:
—–
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) [GB]:AR
State or Province Name (full name) [Berkshire]:BSAS
Locality Name (eg, city) [Newbury]:CAMPANA
Organization Name (eg, company) [My Company Ltd]:ITRESTAURACION
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server’s hostname) []:mail.villadalmine.com
Email Address []:postmaster@villadalmine.com
[root@mail CA]#

Aca como vemos hemos creado con sus opciones:
*una clave rsa de 4096 bits de tamaño
*La hemos guardado en /etc/CA/private/cakey.pem
*Hemos creado el certificado como autofirmado, dado que no lo va a firmar otra CA
*-x509 que indica que esta autofirmado
*-extensions v3_ca que especifica que estamos creando un certificado CA
*-config donde le decimos apartir de donde saca la configuracion
Tambien nos va a pedir una clave privada para nuestra CA ademas de los datos personales que vimos anteriormente.

Ya estamos listo tenemos nuestra CA podemos empezar a firmar certificados.

*.Ahora vamos a firmar nuestro certificado anteriormente creado con nuestra autoridad certficadora.*
Ya estamos listo para firmar nuestra peticion de certificado (CSR).
Esto va a tomar el CSR y lo firma con nuestra CA donde en la salida nos muestra el certificado firmado y ya estariamos listo para utilizar postfix con TLS.

Procedamos a firmarlo…

[root@mail CA]# openssl ca -out /root/mail.villadalmine.com.cert -config ./openssl.cnf -infiles /root/mail.villadalmine.com.req

Using configuration from ./openssl.cnf
Enter pass phrase for ./private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Sep 19 22:27:32 2010 GMT
Not After : Sep 19 22:27:32 2011 GMT
Subject:
countryName = AR
stateOrProvinceName = BSAS
organizationName = ITRESTAURACION
commonName = mail.villadalmine.com
emailAddress = postmaster@villadalmine.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
D7:0C:D7:3F:E6:8E:10:4F:19:A5:19:08:86:5B:FA:E2:AE:64:B5:1C
X509v3 Authority Key Identifier:
keyid:00:09:79:B0:4C:59:16:F7:E9:B3:B0:47:4C:5F:F7:9B:E1:43:3F:D4

Certificate is to be certified until Sep 19 22:27:32 2011 GMT (365 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
[root@mail CA]#

Ya tenemos nuestro certificado firmado 🙂

Las opciones que usamos fueron:
*ca que firmaremos nuestra peticion
*-out el certificado firmado que vamos a mostrar
*-infiles especifica el CSR que queremos firmar
*-config ./openssl especifica donde tenemos nuestra configuracion

Tambien vimos que nos pidio una clave que es la privada de nuestra CA, luego nos pide que confirmemos y posteriormente vamos a tener nuestras bases actualizadas en donde si miramos en /root vamos a tener un certificado firmado, una clave privada y una peticion de certificado.

Si quisieramos ver los detalles de nuestro certificado firmado:

[root@mail CA]# openssl x509 -in /root/mail.villadalmine.com.cert -noout -text -purpose

Para mas informacion acerca de como instalar el certificado raiz en varios clientes dado que un cliente podria revocarnos un certificado.
http://wiki.cacert.org/BrowserClients

Con esto ya tenemos los certificados y las entidades creadas en la proxima entrega vemos como configurar el postfix para que use TLS.

Fuentes:
[1]http://es.wikipedia.org/wiki/Transport_Layer_Security
[2]
[3]

One thought on “Probando postfix en Centos 5.5 Parte 2

Leave a Reply