Certificat TLS StartSSL avec Nginx, Postfix, Dovecot

  1. Pré-requis
  2. Création de la clé privée
  3. Création de la clé de certification
  4. Création du certificat signé par StartCom Ltd
  5. Utilisation avec Nginx
  6. Utilisation avec Dovecot
  7. Utilisation avec Postfix
  8. Pour finir

1. Pré-requis

OpenSSL, cette boite à outil tant décrié par Matthew Green, les gens du projet ClearCrypt et bien d'autres, enfin bon…

Sous Arch Linux :

[root@serveur ~]# pacman -Qs openssl
    local/openssl 1.0.1.g-1
      The Open Source toolkit for Secure Sockets Layer and Transport Layer
      Security

C'est déjà installé, on peut continuer, sinon on installe :

[root@serveur ~]# pacman -S openssl

Pour les autres distributions, vous les connaissez mieux que moi.

2. Création de la clé privée

[root@serveur ~]# openssl genrsa -out tetsumaki.net.key 4096
    Generating RSA private key, 4096 bit long modulus
    .................................................
    ........++
    e is 65537 (0x10001)
[root@serveur ~]# chmod 400 tetsumaki.net.key

Pour plus d'informations sur les commandes précédentes :

[root@serveur ~]# man openssl
[root@serveur ~]# man genrsa

3. Création de la clé de certification

[root@serveur ~]# openssl req -new -key tetsumaki.net.key -out tetsumaki.net.csr
    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]:FR
    State or Province Name (full name) [Some-State]:.
    Locality Name (eg, city) []:
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:.
    Organizational Unit Name (eg, section) []:
    Common Name (e.g. server FQDN or YOUR name) []:tetsumaki.net
    Email Address []:
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:

Pour plus d'informations sur les commandes précédentes :

[root@serveur ~]# man openssl
[root@serveur ~]# man req

Le fichier tetsumaki.net.csr peut maintenant nous servir à générer un certificat auto-signé ou alors à l'envoyer à une autorité de certification, c'est la dernière solution qui nous intéresse.

4. Création du certificat signé par StartCom Ltd

On colle le contenu de notre clé de certification tetsumaki.net.csr.

Quelques instants plus tard nous obtenons notre certificat signé :

  • ssl.crt que je renomme en tetsumaki.net.crt

Ainsi que les certificats Root CA et Class 1 Intermediate Server CA :

Nous nous retrouvons donc avec :

  • ca.pem
  • sub.class1.server.ca.pem
  • tetsumaki.net.crt
  • tetsumaki.net.csr
  • tetsumaki.net.key

5. Utilisation avec Nginx

Il faut créer un certificat unifié avec notre certificat ainsi que les CA certificats :

[root@serveur ~]# cat tetsumaki.net.crt sub.class1.server.ca.pem ca.pem > /etc/nginx/conf/ssl-unified.crt
[root@serveur ~]# chmod 600 /etc/nginx/conf/ssl-unified.crt

Puis il faut copier la clé privée :

[root@serveur ~]# cp tetsumaki.net.key /etc/nginx/conf/ssl.key
[root@serveur ~]# chmod 600 /etc/nginx/conf/ssl.key

Nous nous retrouvons donc avec :

  • ssl-unified.crt
  • ssl.key

Pour le fichier de configuration /etc/nginx/nginx.conf :

# […]
ssl_certificate ssl-unified.crt;
ssl_certificate_key ssl.key;
# […]

6. Utilisation avec Dovecot

Il faut créer un certificat unifié avec notre certificat ainsi que le Class 1 Intermediate Server CA :

[root@serveur ~]# cat tetsumaki.net.crt sub.class1.server.ca.pem > /etc/dovecot/ssl-unified.crt
[root@serveur ~]# chmod 600 /etc/dovecot/ssl-unified.crt

Puis il faut copier la clé privée ainsi que le Root CA :

[root@serveur ~]# cp tetsumaki.net.key /etc/dovecot/ssl.key
[root@serveur ~]# cp ca.pem /etc/dovecot/
[root@serveur ~]# chmod 600 /etc/dovecot/ca.pem /etc/dovecot/ssl.key

Nous nous retrouvons donc avec :

  • ca.pem
  • ssl-unified.crt
  • ssl.key

Pour le fichier de configuration /etc/dovecot/conf.d/10-ssl.conf :

; […]
ssl_ca = </etc/dovecot/ca.pem
ssl_cert = </etc/dovecot/ssl-unified.crt
ssl_key = </etc/dovecot/ssl.key
; […]

7. Utilisation avec Postfix

C'est exactement la même méthode que pour Dovecot, donc nous récupérons les fichiers :

[root@serveur ~]# cd /etc/dovecot/
[root@serveur dovecot]# cp ca.pem ssl-unified.crt ssl.key /etc/postfix/
[root@serveur dovecot]# cd /etc/postfix/
[root@serveur postfix]# chmod 600 /etc/dovecot/ca.pem /etc/dovecot/ssl.key

Pour le fichier de configuration /etc/postfix/main.cf :

; […]
smtpd_tls_key_file = /etc/postfix/ssl.key
smtpd_tls_cert_file = /etc/postfix/ssl-unified.crt
smtpd_tls_CAfile = /etc/postfix/ca.pem
; […]

Il aurait bien sûr été possible d'utiliser directement les fichiers de configuration dans /etc/dovecot/ ou encore d'avoir une configuration unifiée dans /etc/ssl/tetsumaki.net/ et bien d'autres possibilités, mais libre à vous de gérer votre configuration comme vous le souhaitez.

8. Pour finir

Il est fortement recommandé de garder précieusement et à l'abri des regards les fichiers générés du chapitre 2 à 4, à savoir :

  • ca.pem
  • sub.class1.server.ca.pem
  • tetsumaki.net.crt
  • tetsumaki.net.csr
  • tetsumaki.net.key

Ma méthode, compression au format .tar.xz puis chiffrement asymétrique grâce à GnuPG avec ma clé publique :

Admettons que mes 5 fichiers se trouvent dans ~/tls :

[root@serveur ~]# cd ~/tls
[root@serveur tls]# tar Jcfv tetsumaki.net.tls.tar.xz *
[root@serveur tls]# gpg --recipient BACFBBBB --encrypt tetsumaki.net.tls.tar.xz

Je copie mon archive chiffré sur une clé USB ainsi que mon raid ou libre à vous de choisir :

[root@serveur tls]# cp tetsumaki.net.tls.tar.xz.gpg /mnt/raid/
[root@serveur tls]# cp tetsumaki.net.tls.tar.xz.gpg /run/media/tetsumaki/tet_key/

Puis je supprime le répértoire ~/tls :

[root@serveur tls]# cd ~
[root@serveur ~]# rm -r ~/tls

Si j'ai de nouveau besoin des fichiers, il me suffira de déchiffrer puis d'extraire :

[root@serveur ~]# mkdir ~/tls
[root@serveur tls]# cd ~/tls
[root@serveur tls]# gpg --decrypt /mnt/raid/tetsumaki.net.tls.tar.xz.gpg > tetsumaki.net.tls.tar.xz
[root@serveur tls]# tar Jxvf tetsumaki.net.tls.tar.xz

Et voilà !