Certificate Autority (CA)

De SeRoM - Wiki
Aller à : navigation, rechercher

Mise en place d'un 'Certificate Autority' (CA)

Préparation

On adapte les valeurs par défaut d'OpenSSL:

 vim /etc/pki/tls/openssl.cnf
     ...
     [ CA_default ]
     dir             = /etc/pki/CA                   # Where everything is kept
     ...
     certificate     = $dir/my-ca.crt                # The CA certificate
     ...
     crl             = $dir/my-ca.clr                # The current CRL
     private_key     = $dir/private/my-ca.key        # The private key
     ...
     [ req_distinguished_name ]
     countryName                     = Country Name (2 letter code)
     countryName_default             = FR
     ...
     stateOrProvinceName             = State or Province Name (full name)
     stateOrProvinceName_default     = Paris
     
     localityName                    = Locality Name (eg, city)
     localityName_default            = Paris
     
     0.organizationName              = Organization Name (eg, company)
     0.organizationName_default      = Example Inc.
     ...

Éventuellement on adapte la policy de matching. Si vous voulez pouvoir signer un certificat émanant d'un autre pays, province, organisation... il faut remplace policy = policy_match par policy = policy_anything. Ou alors adapter la policy de match dans la section correspondante:

 # For the CA policy
 [ policy_match ]
 countryName             = match
 stateOrProvinceName     = match
 organizationName        = match
 organizationalUnitName  = optional
 commonName              = supplied
 emailAddress            = optional

On créer une arborescence sous /etc/pki/CA/ ainsi qu'un index et un sérial:

 mkdir -p /etc/pki/CA/{certs,crl,newcerts}
 touch /etc/pki/CA/index.txt
 echo 01 > /etc/pki/CA/serial

Générer une paire de clés pour signature

Pour signer les différents certificat que l'on va soumettre au CA, on a besoin d'une clé. Voici comment la créer:

 openssl genrsa  -des3 2048 -out /etc/pki/CA/private/my-ca.key
 chmod 600 /etc/pki/CA/private/my-ca.key

Note

Note

Il existe un script pour exécuter les commandes openssl générant les clés et certificats.

 cd /etc/pki/tls/certs/; make /etc/pki/CA/private/my-ca.key
 cd /etc/pki/tls/certs/; make /etc/pki/CA/my-ca.crt
 cd /etc/pki/tls/certs/; make /etc/pki/CA/my-ca.csr

Je préfère utiliser les commandes openssl. Mais à titre de doc/référence il est toujours intéressant de jeter un oeil dans ce script make.

Générer un certificat

Pour être reconnu comme Autorité on a besoin d'un Certificat. Voici comment on va le générer.

 openssl req -new -x509 -key /etc/pki/CA/private/my-ca.key -days 365 > /etc/pki/CA/my-ca.crt

Publication de certificats via Apache

On prévoit un dossier pour publier les certificats:

 mkdir /var/www/html/certs/

On copie notre certificat tout frais:

 cp /etc/pki/CA/my-ca.crt /var/www/html/certs/

On oublie pas le contexte SELinux:

 restorecon -R /var/www/html/certs/

Signer un Certificat

Par exemple, un certificat pour Dovecot.

Coté 'client'

On se crée une nouvelle clé privé

 openssl genrsa 1024 > ~/dovecot.key
 chmod 600 ~/dovecot.key

On génère une Requête de Signature de Certificat (CSR):

 openssl req -new -key ~/dovecot.key -out ~/dovecot.csr
 chmod 600 ~/dovecot.csr

Note

Note

CSR human readable: les arguments -noout et -text permetent d'avoir un output lisible du fichier.

openssl req -in dovecot.csr -noout -text

Coté 'CA'

On va signer le Certificate Request (.csr) en tant que Certificate Authority:

 openssl ca -in ~/dovecot.csr -out dovecot.crt

On peut voir les certificats qui on été signés dans l'index:

 cat /etc/pki/CA/index.txt
     V     131002084135Z         01    unknown /C=FR/ST=Paris/O=Example Inc./CN=server.example.com/emailAddress=root@example.com

Déploiement du certificat signé par le CA sur Dovecot

Configuration imaps

On active uniquement le protocole imaps:

 vim /etc/dovecot.conf 
    protocols = imaps
 /etc/init.d/dovecot restart

Signer un Certificat pour Dovecot

On a fait signer notre certificat (Voir chapitre précédent).

Vous vous retrouvez donc avec:

  • une clé dovecot.key que vous avez générer vous même
  • et un certificat signé que vous a renvoyer le CA: dovecot.crt

Mettre en place le certificat signé

On copie donc ces deux fichiers (dovecot.key, dovecot.crt) aux endroits qui vont bien.

 cp dovecot.key /etc/pki/dovecot/private/dovecot.pem
 cp dovecot.crt /etc/pki/dovecot/certs/dovecot.pem

On s'assure que la clé n'est pas lisible de tous (vu qu'elle n'est pas cryptée).

 chmod 600 /etc/pki/dovecot/private/dovecot.pem

Et on redémarre le service Dovecot pour prendre ça en charge.

 /etc/init.d/dovecot restart

Note

Note

Pour retrouver les endroits qui vont biens pour déposer la clé et le certificat:

  grep "ssl_cert_file\|ssl_key_file" /etc/dovecot.conf 
      ssl_cert_file = /etc/pki/dovecot/certs/dovecot.pem
      ssl_key_file = /etc/pki/dovecot/private/dovecot.pem

Installation du certificat public du CA sur le client mail

C'est bien joli d'avoir un service imap sécurisé, encore faut il que nos clients mail fasse confiance en son certificat. Pour cela, on va renseigner le certificat publique du CA dans notre client mail mutt.

On récupère le certificat du CA que le CA publie sur son site.

 wget http://server.example.com/certs/my-ca.crt -O .mutt/my-ca.crt

On indique à mutt que où l'on a téléchargé le certificat du CA.

 vim .mutt/muttrc
     set certificate_file=~/.mutt/my-ca.crt

Évidement il faudra aussi indiquer à mutt de se connecté en imaps et lui passer les coordonnées du serveur.

 vim .mutt/muttrc
     set folder=imaps://server107.example.com/
     set spoolfile=imaps://server107.example.com/
     set imap_force_ssl=yes

Révoquer un certificat

Admettons que le certificat de Dovecot est compromis.

Identifier le bon certificat

On va d'abord s'assurer que l'on révoque le bon certificat. Pour cela on compare l'ouptut fourni par openssl sur le certificat Dovecot et le contenu de notre index.

 openssl x509 -in /etc/pki/dovecot/certs/dovecot.pem -noout -serial -subject
 cat /etc/pki/CA/index.txt

Révoquer

Quand on a confirmer le serial du certificat, on peut le révoquer ainsi:

 openssl ca -revoke /etc/pki/CA/newcerts/<serial>.pem

Publier la liste des certificats révoqués

À l'instar du serial pour la creation de certificat, on va initialisé un numéro pour identifier les CRLs.

 echo "01" > /etc/pki/CA/crlnumber

Ensuit on peut générer notre première liste de certificats révoqués:

 openssl ca -gencrl -out /etc/pki/CA/crl/my-ca.crl

Ce fichier est à publier à coté de my-ca.crt via apache par exemple:

 cp /etc/pki/CA/my-ca.crl /var/www/html/certs/

Note

Note

CRL pour Firefox: Firefox utilise un autre format de fichier .clr: le DER. On peut convertir comme ceci:

openssl crl -in /etc/pki/CA/crl/my-ca.crl -outform DER -out /etc/pki/CA/crl/my-ca-DER.crl

Note

Note

CRL human readable: Comme déjà vu pour les fichiers .csr, le -noout -text permet d'avoir un output lisible du fichier.

openssl crl -in /etc/pki/CA/crl/my-ca.crl -noout -text

Références