WIP cert client

This commit is contained in:
benoit 2017-03-05 16:46:21 +01:00
parent b88dddba96
commit 0ad5793be7

View file

@ -93,6 +93,8 @@ On supprime exim4, car Mailcow utilise postfix.
# apt purge exim4 exim4-base exim4-config exim4-daemon-light # apt purge exim4 exim4-base exim4-config exim4-daemon-light
``` ```
## Installation
Puis on télécharge le script d'installation, on édite la configuration et on lance l'installation. Puis on télécharge le script d'installation, on édite la configuration et on lance l'installation.
``` ```
@ -109,7 +111,7 @@ Laissez-vous guider par le script d'installation.
# ./install.sh # ./install.sh
``` ```
# Fini ## Fini
Voilà, c'est fini ! Il vous reste à créer votre premier compte mail via l'interface d'admin. Voilà, c'est fini ! Il vous reste à créer votre premier compte mail via l'interface d'admin.
@ -117,7 +119,7 @@ Si vous avez des questions ou besoin d'aide, n'hésitez pas à ouvrir un ticket
# Bonus : Certificat client X.509 # Bonus : Certificat client X.509
L'idée est de restreindre l'accès au services web (webmail et admin), et mail (SMTPS/IMAPS) via un certificat client X.509. Sans ce certificat, impossible d'accéder à quoi que ce soit. L'idée est de restreindre l'accès aux services web (webmail et admin), et mail (SMTPS/IMAPS) via un certificat client X.509. Sans ce certificat, impossible d'accéder à quoi que ce soit.
> **Note** : Cela remplace le certificat Let's Encrypt utilisé par Mailcow. > **Note** : Cela remplace le certificat Let's Encrypt utilisé par Mailcow.
@ -133,30 +135,74 @@ Pour cela il faut mettre en place une `PKI` et émettre un certificat client. J'
# sed -i -e 's#PREFIX=.*#PREFIX=/etc/shellpki#' -e 's#WWWDIR=.*#WWWDIR=/etc/ssl/clients#' shellpki.sh # sed -i -e 's#PREFIX=.*#PREFIX=/etc/shellpki#' -e 's#WWWDIR=.*#WWWDIR=/etc/ssl/clients#' shellpki.sh
``` ```
Éditer `/etc/shellpki/openssl.cnf` et initialiser shellPKI. Le plus important est de remplir le « Common Name », par exemple `ca.domain.tld`. Éditer `/etc/shellpki/openssl.cnf` et initialiser shellPKI. Le plus important est de remplir le « Common Name », par exemple `Myname Root Certificate`.
``` ```
# vim /etc/shellpki/openssl.cnf # vim /etc/shellpki/openssl.cnf
# ./shellpki.sh init # ./shellpki.sh init
``` ```
Ensuite on génère un Injecter le certificat racine `/etc/shellpki/ca/cacert.pem` dans votre navigateur et vos appareils tel qu'un smartphone.
On obtiens un certificat et une clé dans `/etc/shellpki/ca/` que l'on peut positionner sur nginx, dovecot et postfix. Ensuite on génère un certificat (sans passphrase) pour les services web et mail avec un « Common Name » correspondant à votre FQDN pour accéder à vos services comme `mail.domain.tld`.
``` ```
# sed -i -e 's#/etc/ssl/mail/mail.crt#/etc/shellpki/ca/cacert.pem#' \ # ./shellpki.sh create
-e 's#/etc/ssl/mail/mail.key#/etc/shellpki/ca/private.key#' \
/etc/nginx/sites-available/mailcow.conf /etc/postfix/main.cf \
/etc/dovecot/dovecot.conf
``` ```
Générer un certificat client On obtiens un certificat et une clé dans `/etc/ssl/clients/` que l'on positionne sur nginx, dovecot et postfix. Les différentes directives à modifier :
```
/etc/nginx/sites-available/mailcow.conf:25: ssl_certificate
/etc/nginx/sites-available/mailcow.conf:26: ssl_certificate_key
/etc/postfix/main.cf:17:smtpd_tls_cert_file
/etc/postfix/main.cf:18:smtpd_tls_key_fil
/etc/dovecot/dovecot.conf:129:ssl_cert
/etc/dovecot/dovecot.conf:130:ssl_key
``` ```
```
# for service in dovecot postfix nginx; do systemctl restart $service; done
``` ```
On en régénère un autre pour votre client (sans passphrase), soit un utilisateur par exemple. On pourra choisir un « Common Name » `username.mail.domain.tld` ou `Nom Prénom`.
```
# ./shellpki.sh create
```
Puis on le converti au format `PKCS#12` avec une passphrase d'export.
```
# cd /etc/ssl/clients
# openssl pkcs12 -export -in benoit.mail.benpro.fr.crt -inkey benoit.mail.benpro.fr.key -out benoit.mail.benpro.fr.p12
```
Il faudra importer ce certificat client dans les navigateurs et dans diverses applications (Thunderbird, Exchange/GMail sous Android, …).
La dernière étape consiste à dire à dovecot et nginx qu'il est nécessaire de présenter un certificat client.
Pour nginx :
```
ssl_client_certificate /etc/shellpki/ca/cacert.pem;
ssl_verify_client on;
```
```
# systemctl restart nginx
```
Pour dovecot :
```
ssl_client_ca_file = </etc/shellpki/ca/cacert.pem
ssl_verify_client_cert = yes
```
```
# systemctl restart dovecot.service
```
# Autres actions # Autres actions
@ -165,5 +211,4 @@ Voici une liste de tâches non exhaustives à faire de votre côté que je ne do
- Activer un pare-feu sur votre machine, par exemple `ufw` ; - Activer un pare-feu sur votre machine, par exemple `ufw` ;
- Monitorer votre serveur ; - Monitorer votre serveur ;
- S'assurer du suivi des mises à jour ; - S'assurer du suivi des mises à jour ;
- Faire des sauvegardes ; - Faire des sauvegardes.
- …