Les certificats ssl, mémo

Je n'ai pas compris les mécanismes de cryptographie SSL, l’algorithme de signature des certificats et tout ça, mais le comportement du navigateur, je l'ai constaté:

logigramme reaction du navigateur en fonction du certificat

Un serveur mail et un extranet, j'utilise des certificats.

Ça ne fait pas très pro les avertissements du logiciel client mail, ou du navigateur. Ça ne doit pas inspirer confiance aux utilisateurs. Il faut donc éviter toutes les sorties du logigramme en rouge.

La première solution consiste à installer chaque certificat sur tous les postes clients. Dans le cas d'un LAN qui commence a être conséquent ce n'est plus possible (enfin si peut être par les GPO, mais faudra le faire pour toutes les applis)

La seconde solution consiste à passer par une autorité de certification et lui faire signer les certificats. Si c'est pour un site web il faut prendre une autorité reconnue par la plupart des navigateurs par défaut: c'est payant. Si c'est dans un lan ou un parc sur lequel vous avez la main. ça vaut le coup de la créer soi même car on pourra la faire reconnaître. Ce n'est pas ça qui occupera un serveur à temps plein. votre pc sous linux peut devenir une autorité de certification.

Avertissement: L'autorité de certification ne doit pas avoir le même nom que le serveur applicatif (dans le cas d'un serveur web), sinon c'est de l'auto signé ôO.

Prérequis, installer les logiciels

Il y a juste le paquet openssl à installer.

apt-get install openssl

sous suze:

zypper in openssl

Le fichier de configuration /etc/ssl/openssl.cnf

Sa modification est optionnelle.
Je l'aisse tout par défaut, sauf ces lignes là:

#nsCaRevocationUrl              = http://www.domain.dom/ca-crl.pem
#nsBaseUrl
#nsRevocationUrl
#nsRenewalUrl
#nsCaPolicyUrl
#nsSslServerName

On va les dé-commenter et renseigner les paramètres. Le but de ces lignes est de marquer dans les certificats les URL qui seront utiles au gestionnaire de certificat du client. On publiera la liste des certificats révoqués par exemple.

pour le test, je vais déposer les fichiers à l'adresse http://www.tinad.fr/certs/

nsCaRevocationUrl               = http://www.tinad.fr/certs/ca-crl.pem
nsBaseUrl = http://www.tinad.fr/certs/
#nsRevocationUrl #Le lien vers le formulaire où le client peut demander une révocation de son certificat (je laisse commenté)
#nsRenewalUrl #Le lien vers le formulaire où le cleient peut demander le renouvellement de son certificat (je laisse commenté)
nsCaPolicyUrl = http://www.tinad.fr/certs/policy.pdf #Une explication de quoi qu'est certifié par le certificat (la méthode de controle des informations telles que la validation des sites internet, la validité des adresses mail etc...)
#nsSslServerName

pour les publier sur le web je créé un lien symbolique. Adaptez la commande à votre configuration:

ln -s  ~/demoCA/crl/ca-crl.pem /var/www/www.tinad.fr/certs/ca-crl.pem

Créer le certificat racine

Tout en étant en root

cd ~
/usr/lib/ssl/misc/CA.pl -newca

Le script va vous poser plusieurs questions:

  • CA certificate filename (or enter to create)

appuyez sur entrée, c'est le premier et le seul certificat racine logiquement.

  • Country Name (2 letter code) [AU]:FR

C'est le code du pays

  • State or Province Name (full name) [Some-State]:France

Le pays

  • Locality Name (eg, city) []:Rouen

La ville (la localisation physique du serveur n'a aucune importance)

  • Organization Name (eg, company) [Internet Widgits Pty Ltd]:gniearkcompany

Le nom de l'organisation. Attention ne mettez pas de connerie comme moi, ça apparaitra sur tous les certificats.

  • Organizational Unit Name (eg, section) []:gniearklan

C'est facultatif, j'ai mis là le nom de domaine local. dans le cas du CA racine de tinad.fr, j'ai mis "tinad.fr" justement

  • Common Name (eg, YOUR name) []:vm2.gniearklan

Il est d'usage de mettre le FQDN complet de la machine. www.tinad.fr par exemple

  • Email Address []:mail@domaine.fr

Un contact "administratif"

Au passage le script utilisé a créé quelques dossiers et fichiers dans demoCA.

  • cacert.pem , c'est le certificat qui servira à signer les autres certificats.
  • careq.pemUn truc qui sert aux demandes de certificat.
  • private Ce dossier contient la clé privé du certificat racine . Ne pas diffuser.

Diffuser/ installer la clé publique du certificat racine.

C'est le fichier cacert.pem qu'il faut diffuser et installer dans les applications concernées.

En utilisant un controleur de domaine win2003

Dans les parametres de sécurité du controleur de domaine par défaut, on va dans autorités de certification en déroulant l'arbre de gauche, puis "action" et "ajouter". Voir screens ci dessous: gpossl0.jpg

gpossl1.jpg

gpossl.jpg

Sur chaque poste, firefox

Editions > préférences > Avancé> chiffrement > afficher les certificats> Autorités de certification sslsurff.jpg

Internet explorer Thunderbird

C'est à peu près là même chose que sur firefox.

Outlook

Je n'ai pas trouvé. Je ne suis pas certain qu'il le prenne en charge (testé sur outlook 2007)

Créer des certificats signés

Imaginons que l'autorité de certification est www.tinad.fr et le site à certifier est www.tinaderp.com (ça tombe bien va falloir que je le fasse)

On se place pour ça dans le repertoire qui contient le dossier demoCA

cd ~

Creer un dossier qui recevra les certificats et se placer dedans:

mkdir cert
cd cert

Créer une clé privée ainsi qu'un certificat public non signé.

openssl req -new -nodes -keyout www.tinaderp.com-key.pem -out www.tinaderp.com-req.pem -days 365

Je mets le même Organization Name que l'autorité de certification. ça doit donner ça:

www:~/CERT# openssl req -new -nodes -keyout www.tinaderp.com-key.pem -out www.tinaderp.com-req.pem -days 365
Generating a 1024 bit RSA private key
.........++++++
.++++++
writing new private key to 'www.tinaderp.com-key.pem'
-----
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]:France
Locality Name (eg, city) []:Rouen
Organization Name (eg, company) [Internet Widgits Pty Ltd]:tinad
Organizational Unit Name (eg, section) []:tinaderp
Common Name (eg, YOUR name) []:www.tinaderp.com
Email Address []:identifiant@domaine.fr

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

Signer le certificat:

cd ~
openssl ca -out cert/www.tinaderp.com-cert.pem -infiles cert/www.tinaderp.com-req.pem
www:~# openssl ca -out CERT/www.tinaderp.com-cert.pem -infiles CERT/www.tinaderp.com-req.pem
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number:
            81:c4:e6:a3:37:dc:50:05
        Validity
            Not Before: Jun 21 16:36:59 2010 GMT
            Not After : Jun 18 16:36:59 2020 GMT
        Subject:
            countryName               = FR
            stateOrProvinceName       = France
            organizationName          = tinad
            organizationalUnitName    = tinaderp
            commonName                = www.tinaderp.com
            emailAddress              = rpasserieu@tinad.fr
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                8E:EA:52:98:18:D1:F0:CD:5F:FD:97:36:A3:E8:98:73:F1:89:30:15
            X509v3 Authority Key Identifier: 
                keyid:2A:96:75:31:A5:A1:0F:1C:19:5E:8D:64:6F:DD:30:44:27:28:23:15

Certificate is to be certified until Jun 18 16:36:59 2020 GMT (3650 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

Le certificat signé est créé. on verra plus loin comment l'installer dans apache ou dans postfix

Installer le certificat et sa clé dans apache.

Tout d'abord on créé un fichier contenant la clé et le certificat qu'on fournira à Apache.

cd ~/cert
cat www.tinaderp.com-key.pem www.tinaderp.com-cert.pem > www.tinaderp.com-certkey.pem

Mettre le fichier certkey dans les fichiers de conf d'apache

mkdir /etc/apache2/ssl
cp ~/cert/www.tinaderp.com-certkey.pem /etc/apache2/ssl/
chmod 600 /etc/apache2/ssl/*
chmod 400 ~/cert/*

Créer le fichier vhost spécifique à l'https. le certificat est fourni à la directive SSLCertificateFile pour tinaderp.com, le fichier est /etc/apache2/sites-available/www.tinaderp.com-https. Sa configuration est relativement basique;

<VirtualHost *:443>
        ServerName www.tinaderp.com 
        DocumentRoot /var/www/www.tinaderp.com
        ServerAdmin webmaster(NOSPAM)tinad.fr
 <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/www.tinaderp.com>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>


	ErrorLog /var/log/apache2/error.log
	CustomLog /var/log/apache2/access.log combined
        SSLEngine on
        SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

        SSLCertificateFile  /etc/apache2/ssl/www.tinaderp.com-certkey.pem 

        SSLVerifyClient none
        SSLVerifyDepth  10

        SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
</VirtualHost>

activer le site er=t recharger la configuration d'apache:

a2ensite www.tinaderp.com-https
/etc/init.d/apache2 reload

Dans postfix et imapd

certificat smtp

On suit la méthode ci dessus pour créer des certificats signés. Sauf que cette fois on ne va pas faire de fichier regroupant la clé et le certificat. Il faut lui fournir les deux. Par contre, je sui fourni aussi le cacert.pem qu'on trouve dans demoCa Ce sont les parametres suivants dans le main.cf

smtpd_tls_key_file = /etc/postfix/tls/smtp.tinad.fr-key.pem
smtpd_tls_cert_file = /etc/postfix/tls/smtp.tinad.fr-cert.pem
smtpd_tls_CAfile = /etc/postfix/tls/cacert.pem

certificat imap tls

vu la config de mon serveur mail, dans le fichier /etc/courier/imapd-ssl c'est la directive suivante : TLS_CERTFILE=/etc/courier/tinad-certkey.pem

Révoquer un certificat

se placer dans le dossier contenant le dossier demoCA, dans mon cas c'est ~

cd ~

Révoquer le certificat en indiquant le fichier cert en parametre.

openssl ca -revoke CERT/www.tinaderp.com-cert.pem

Générer la liste des certificats révoqués:

cd ~
www:~# openssl ca -gencrl -out demoCA/crl/cacrl.pem

Supprimer les fichiers du certificat:

CERT
rm www.tinaderp.com-cert.pem 
rm www.tinaderp.com-req.pem 
rm www.tinaderp.com-key.pem

Liens francophones

http://www.docmirror.net/fr/linux/howto/apps/SSL-Certificates-HOWTO/x248.html
Starbridge (même si les tutos ne portent pas sur les certificats, il y a plusieurs exemples d'utilisation d'openssl)
Admin linux

Page top