Habitualmente utilizamos los certificados SSL para proteger el acceso a la web, conviertiendo el protocolo HTTP en HTTP + SSL o HTTPS. Lo que no es tan conocido es que esos mismos certificados pueden utilizarse, muy facilmente, para proteger otros servicios.
A continuación os muestro como podemos usar un solo certificado para proteger todos los servicios de correo proporcionados por un servidor. Supongamos que queremos utilizar el dominio correo.ejemplo.com y pedimos un certificado para ese dominio. El mismo certificado nos proporcionará HTTPS para el correo web así como IMAPS, POP3S y SMTP sobre SSL.
Obtención del certificado
sb1:/etc/courier# openssl genrsa -out correo.ejemplo.com.key.unsecure 1024
Generating RSA private key, 1024 bit long modulus
Creación de una petición de certificado (CSR)
sb1:/etc/courier# openssl req -new -key correo.ejemplo.com.key.unsecure -out correo.ejemplo.com.csr
Using configuration from /usr/lib/ssl/openssl.cnf
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) [AU]:ES
State or Province Name (full name) [Some-State]:Barcelona
Locality Name (eg, city) []:Barcelona
Organization Name (eg, company) [Internet Widgits Pty Ltd]:ejemplo
Organizational Unit Name (eg, section) []:ejemplo
Common Name (eg, YOUR name) []:correo.ejemplo.com
Email Address []:admin@ejemplo.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Verificamos que todo sea correcto, especialmente el CN:
sb1:/etc/courier# openssl req -noout -text -in correo.ejemplo.com.csr
Using configuration from /usr/lib/ssl/openssl.cnf
Certificate Request:
Data:
Version: 0 (0x0)
Subject: C=ES, ST=Barcelona, L=Barcelona, O=ejemplo, OU=ejemplo, CN=correo.ejemplo.com/Email=admin@ejemplo.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:ac:29:72:c5:be:6d:51:00:d7:07:3a:48:17:13:
de:aa:71:54:31:0c:f2:a1:ed:d5:22:07:c2:44:c8:
c8:09:7b:52:4c:2d:00:87:0d:84:9e:ef:5d:d1:16:
f0:6c:01:3e:71:32:af:90:6a:06:53:41:02:1c:d5:
01:0c:bb:9a:78:3c:c1:55:6a:a0:e6:13:18:71:4f:
cf:99:b5:ef:6f:03:21:ed:4a:8b:23:96:a6:e9:01:
75:70:5c:89:0c:57:e3:01:48:07:03:fb:bb:15:7a:
a4:34:80:9a:ef:41:71:b7:89:39:20:3f:bd:01:25:
51:5d:be:ed:f0:c6:30:07:27
Exponent: 65537 (0x10001)
Attributes:
a0:00
Signature Algorithm: md5WithRSAEncryption
84:14:0f:f1:cf:5b:b1:47:50:31:0d:d1:a5:19:47:06:c9:7a:
47:7a:de:29:b2:2b:b2:a9:9b:f4:c1:c1:76:cb:56:69:93:02:
da:67:6e:7d:65:11:8a:44:ac:e8:b6:20:8a:1b:3c:fa:e5:a5:
90:92:0b:29:8e:ae:4c:2e:fa:5f:98:c2:01:72:4a:06:a1:ca:
9a:43:98:0a:73:20:0d:7d:16:0a:ac:f6:ba:ad:a3:d0:ed:84:
41:9c:a3:f2:a3:76:7d:e0:03:70:37:2f:bc:4a:2f:11:5a:23:
14:41:fc:fd:fd:8e:e9:93:b5:4b:2e:cf:af:1f:8e:8c:2e:21:
a5:d9
Utilizando el CSR generado, solicitamos el certificado a una CA.
Una vez obtenido el certificado, lo salvamos en disco ‘‘/etc/courier/correo.ejemplo.com.pem’’ .
Podemos utilizar la orden openssl x509 -in correo.ejemplo.com.pem -text -noout
para revisar el certificado, especialmente el CN y la caducidad.
Instalación del certificado en Courier-IMAP SSL
Necesitamos combinar el certificado con la llave privada sin encriptar en un sólo fichero:
cat ''correo.ejemplo.com.key.unsecure correo.ejemplo.com.pem > correo.ejemplo.com.crt''
Eliminamos la llave dejando sólo el .crt, y restringimos sus permisos:
sb1:/etc/courier# chmod 400 correo.ejemplo.com.crt
sb1:/etc/courier# ls -l
total 52
-rw-r--r-- 1 root root 2672 Nov 14 2002 authdaemonrc
-rw-r--r-- 1 root root 11 Nov 14 2002 authmodulelist
-r-------- 1 root root 3141 May 25 02:06 correo.ejemplo.com.crt
-rw-r--r-- 1 root root 708 May 22 05:17 correo.ejemplo.com.csr
-rw-r--r-- 1 root root 8276 May 23 10:06 imapd
-rw-r--r-- 1 root root 5696 May 25 02:11 imapd-ssl
-rw-r--r-- 1 root root 336 Jan 29 2003 imapd.cnf
-rw------- 1 root root 2133 Apr 22 11:41 imapd.pem
-rw-r--r-- 1 root root 3380 Nov 14 2002 pop3d
-rw------- 1 root root 3585 Apr 23 10:40 ejemplomail.crt
E indicar al servidor que utilice este nuevo certificado añadiendo
''TLS_CERTFILE=/etc/courier/correo.ejemplo.com.crt''
</pre>
al fichero de configuración ''/etc/courier/imapd.ssl''
Instalación del certificado en Exim MTA (SMTP)Copiamos el certificado a ''/etc/exim4/correo.ejemplo.com.crt'' y la clave privada a ''/etc/exim4/correo.ejemplo.com.key.unsecure''.Nos aseguramos permisos restrictivos para la llave privada:
<pre class="brush: plain">
sb1:/etc/exim4# chmod 640 ejemplomail.key.unsecure
sb1:/etc/exim4# chgrp Debian-exim ejemplomail.key.unsecure
sb1:/etc/exim4# ls -l
total 172
drwxr-xr-x 9 root root 4096 May 13 15:00 conf.d
-rw-r--r-- 1 root root 2253 May 25 05:13 correo.ejemplo.com.crt
-r--r--r-- 1 root root 888 May 25 05:13 correo.ejemplo.com.key.unsecure
-rw-r--r-- 1 root root 38011 Jul 1 18:51 exim4.conf.template
-rw-r--r-- 1 root root 37235 May 13 15:08 exim4.conf.template.bk
-rw-r--r-- 1 root root 49552 Jul 27 18:08 exim4.conf.template.dpkg-dist
-rw-r--r-- 1 root root 1088 Oct 20 13:31 passwd
-rw-r----- 1 root Debian-e 112 Apr 26 2004 passwd.client
-rw-r--r-- 1 root root 3585 May 13 15:27 ejemplomail.crt
-rw-r----- 1 root Debian-e 887 May 13 15:27 ejemplomail.key.unsecure
-rw-r--r-- 1 root root 658 Oct 18 09:10 update-exim4.conf.conf
-rw-r--r-- 1 root root 402 May 13 15:08 update-exim4.conf.conf.bk
Modificamos ‘‘/etc/exim4/exim4.conf.template’’ para modificar las siguientes entradas:
# tls_try_verify_hosts = *
# tls_certificate = /etc/exim4/ejemplomail.crt
# tls_privatekey = /etc/exim4/ejemplomail.key.unsecure
tls_certificate = /etc/exim4/correo.ejemplo.com.crt
tls_privatekey = /etc/exim4/correo.ejemplo.com.key.unsecure
# #####################################################################