banneer

Informatique › SSL HTTPS chiffrement et certificats

Fil des billets - Fil des commentaires

SSL-SSL_Logo__red.jpgNos avons vu dans ce billet comment faire une autorité de certification. Voyons comment s'en servir pour créer des certificats PKCS12 servant à signer les mails. Ça n'a aucun intérêt car seuls les personnes ayant votre certificat racine pourront vérifier la signature (enfin pas eux, leur logiciel client mail). C'est juste pour le fun ce billet, Pour des certificats de signature de mail, il vaut mieux regarder du coté des autorités de certification telles que thawte verisign etc....

Creer le certificat et sa clé:

cd ~/CERT
openssl req -new -keyout gnieark\@tinad.fr-key.pem -out gnieark\@tinad.fr-req.pem -days 365

Adaptez les réponses à vos besoins, Cependant le "Organization Name" doit etre le même que le certificat racine:

Generating a 1024 bit RSA private key
...++++++
...++++++
writing new private key to 'gnieark@tinad.fr-key.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
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) []:tinad.fr
Common Name (eg, YOUR name) []:gnieark@tinad.fr
Email Address []:gnieark@tinad.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/gnieark\@tinad.fr-cert.pem -infiles CERT/gnieark\@tinad.fr-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:0a
        Validity
            Not Before: Jun 25 09:11:12 2010 GMT
            Not After : Jun 22 09:11:12 2020 GMT
        Subject:
            countryName               = FR
            stateOrProvinceName       = France
            organizationName          = tinad
            organizationalUnitName    = tinad.fr
            commonName                = gnieark@tinad.fr
            emailAddress              = gnieark@tinad.fr
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                1F:AD:68:6F:CE:E3:33:23:6C:2E:4D:86:FD:FC:CD:A4:D9:F5:8F:32
            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

            Netscape CA Revocation Url: 
                http://www.tinad.fr/certs/ca-crl.pem
            Netscape CA Policy Url: 
                http://www.tinad.fr/certs/policys.pdf
Certificate is to be certified until Jun 22 09:11:12 2020 GMT (365 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

Convertir le certificat au format PKCS:

openssl pkcs12 -in CERT/gnieark\@tinad.fr-cert.pem -inkey CERT/gnieark\@tinad.fr-key.pem -certfile demoCA/cacert.pem -out CERT/gnieark\@tinad.fr.p12 -name "grouik" -export
Enter pass phrase for CERT/gnieark@tinad.fr-key.pem:
Enter Export Password:
Verifying - Enter Export Password:

Maintenant il faut chopper gnieark@tinad.fr.p12 et le mettre sur son ordinateur.

Le paramétrage de Thunderbird est simple: Editions paramètres des comptes, dans la partie "sécurité", Il y a tout ce qu'il faut. Ça permet d'envoyer des messages signée: la classe. pkcsff5.jpg


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


SSH

lien vers la documentation utilisée

Dans le cas d'un serveur dédié, ssh est le seul point d'entrée dans la configuration initiale. Autant le paramétrer dès le début car si on se rate, on perd définitivement la main sur le serveur et il faudra relancer l'installation automatique du système de base(qui prend 10 min) mais ça peut être râgeant si on a déja passé plusieurs heures à le configurer.

installation

il est installé par défaut sur un serveur dédié. Sinon pour l'installer:

apt-get install openssh-serveur

Configuration

Le fichier de configuration est /etc/ssh/sshd_conf.
Sérieusement, je ne donne pas un mois à votre serveur avant d'être corrompu si certains principes de sécurité ne sont pas appliqués. Pour que le risque de se faire corrompre le serveur par ce biais se rapproche de 0, on va le configurer de la façon suivante:

  • Interdire la connection de l'utilisateur de root. L'élévation des privilèges est possible en ssh par la suite avec la commande "su". Avec un peu de recul on s'aperçoit que les attaques en force brute (quotidiennes) se font la pluspart du temps par tentatives avec des identifiants bateau, root, par exemple, administrator, admin, webmaster... Interdire la connection à ces identifiants est déja une bonne protection.
  • Pas d'authentification par mot de passe mais par clé ssh. C'est ce point qui ramène le risque à quasiement 0. Je ne pense pas qu'il soit possible de casser une clé ssh. Par contre de la voler sur l'ordinateur client oui (quoiqu'elle est stockée cryptée)...
  • Changer le port d'écoute par défaut... Personnellement je ne l'ai pas fait, mais je pense" que c'est aussi une prévention supplémentaire intéressante.

Créer le couple de clés sur le PC client

Sur le PC client, si vous n'avez pas déja un couple de clés, pour en créer un, avec votre compte utilisateur normal (pas en root):

ssh-keygen -t dsa

L'utilisation d'une passphrase est conseillée.

Les clés sont placés généralement dans un dossier caché: « /.ssh/id_dsa » pour la clé privé.

Pour le moment on peut s'identifier par mot de passe au serveur, utilisons ce biais pour placer la clé publique.

ssh-copy-id -i ~/.ssh/id_dsa.pub <username>@<ipaddress>

puis pour autoriser la clé:

ssh login@serveur "echo $(cat ~/.ssh/id_dsa.pub) >> .ssh/authorized_keys"

Appliquer la nouvelle méthode d'authentification:

Sur le serveur, on modifie le fichier /etc/ssh/sshd_conf de la manière suivante:

On change:

PermitRootLogin no
PasswordAuthentication no
UsePAM no

Eventuellement on définit les utilisateurs ayant accès à ssh (utile si pour certaines fonctions du serveur vous aurez besoin de créer des comptes unix qui n'ont pas lieu de faire du ssh) On avoute la ligne suivante (remplacez par vos identifiants):

AllowUsers user1 user2

redémarrage du serveur ssh

/etc/init.d/ssh restart

On se connecte comme ça:

ssh user@FDQNouIPduServeur