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é:
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:
Sur chaque poste, firefox
Editions > préférences > Avancé> chiffrement > afficher les certificats> Autorités de certification
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