La sécurité en pratique

Les problèmes de sécurité sont suffisamment complexes et sérieux pour que ceux qui s’y connaissent aient raison de dire que ceux qui ne les comprennent pas ne devraient pas s’en occuper : c’est ce que pense l’un de nous (Ben Laurie). L’autre (Peter Laurie) voit plus les choses du point de vue du webmestre ordinaire, qui souhaite simplement protéger ses biens. La sécurité d’un site web n’est qu’un des nombreux problèmes à résoudre.

C’est un peu comme s’il fallait obtenir un doctorat de mécanique avant de pouvoir acheter et conduire une voiture en toute sécurité. L’industrie mécanique était comme cela en 1900 -- elle a évolué depuis.

Dans les éditions précédentes, nous avions prudemment esquivé les questions pratiques et renvoyé le lecteur à d’autres lectures. Nous pensons maintenant que les choses ont suffisamment évolué pour ajouter une section sur ce que les professionnels appellent « recettes de cuisine sur la sécurité ». Cela dit, nous ne vous conseillons pas de lire cette section puis d’aussitôt mettre en ligne un site bancaire ; cependant, si vos problèmes de sécurité se limitent à interdire l’accès aux pirates occasionnels et à vos rivaux commerciaux, elle peut suffire.

La plupart d’entre nous a besoin d’une bonne serrure sur sa porte d’entrée et, au cours des années, nous avons appris comment choisir et mettre en place cette serrure. Malheureusement, ce niveau de compétence ne s’est pas encore développé sur le Web. Dans cette section, nous présentons une bonne serrure ordinaire ; l’installation d’un système de sécurité plus élaboré demandera de plus amples investigations de la part du lecteur.

Recettes de sécurité

Le premier problème de la sécurité consiste à savoir avec qui vous traitez. Les interrogations du client sur l’identité du site (« Est-ce que j’envoie bien mon argent à la véritable MegaBank, ou à une bande de clowns à Bogota ? ») devraient être réglées par un certificat du serveur, comme nous l’avons décrit plus haut.

Vous, en tant que webmestre, voulez aussi être sûr que la personne qui se connecte sous l’identité de l’un de vos chers clients est bien cette personne et non un rusé lascar.

Sans qu’il ne vous en coûte rien, SSL chiffre à la fois vos données et vos mots de passe pour l’authentification de base (voir le chapitre 5) lorsqu’ils traversent le Web. C’est un grand pas vers la sécurité : les sales types qui espionneraient votre trafic seraient un peu découragés. Mais, on se fie encore à un mot de passe pour prouver que ce n’est pas un sale type qui se trouve à la place du client ; les certificats des clients peuvent améliorer cela.

Bien qu’il existe des techniques pour vérifier qu’un individus précis se trouve derrière la console -- lecture des empreintes digitales ou de la rétine, etc. -- aucun de ces dispositifs n’a un prix suffisamment abordable (ou n’est suffisamment fiable) pour être utilisé à grande échelle. De plus, la biométrie a deux gros défauts : ses empreintes ne peuvent être révoquées et elle encourage les sales types à voler des parties de votre corps. Elle n’est pas si fiable que cela non plus : vous pouvez utiliser de la gélatine pour obtenir des empreintes digitales déposées sur les capteurs et les réutiliser ensuite, puis faire disparaître les preuves une fois que vous êtes passé. Les capteurs d’iris peuvent être trompés par un portable affichant une image de l’œil autorisé.

On peut, par contre, s’assurer que la machine du client dispose du certificat client adéquat (de façon logicielle ou, mieux, par un dispositif matériel quelconque) et que la personne au clavier connaît la phrase d’authentification correcte.

Pour montrer comment tout cela fonctionne, nous devons suivre les étapes suivantes.

Certificat client de test

Pour commencer, nous devons obtenir un certificat client (pour pouvoir prétendre être un client vérifié). Votre navigateur aura peut-être un dispositif qui prend en charge cette opération, ou vous pouvez consulter deux sources indépendantes : Thawte ( http://www.thawte.com ) et Verisign ( http://www.verisign.com ). Thawte les appelle « certificats personnels » et Verisign « identifiants numériques personnels ». Comme la version de Verisign coûte environ 15 euros par an et que celle de Thawte est gratuite, nous avons choisi cette dernière.

Le processus est bien expliqué sur le site web de Thawte, nous ne le reproduirons donc pas ici. Cependant, il y a un obstacle caché. La première chose à faire consiste à établir un compte client : on indique son nom, son adresse postale et électronique, etc., ainsi qu’un identifiant numérique quelconque -- numéro de permis de conduire, de passeport, d’assurance, etc. (aucune vérification n’est faite sur ce numéro) ; puis, on choisit un mot de passe.

Jusque là, tout va bien. J’avais oublié qu’il y a un an ou deux j’avais ouvert un compte chez Thawte pour une autre raison : je n’ai rien fait avec, sauf oublier son mot de passe.

De nombreux sites peuvent vous envoyer votre mot de passe par courrier électronique pourvu que vous leur fournissiez un nom et une adresse électronique correcte : ce n’est pas le cas de Thawte. Ils disposent d’une procédure vous permettant de récupérer votre mot de passe mais c’est d’une lourdeur incroyable. Pour m’éviter des efforts, j’ai donc décidé de m’inventer une nouvelle identité électronique, « K. D. Price » avec une adresse électronique sur http://www.hotmail.com afin d’ouvrir un nouveau compte Thawte sous ce nom. Lorsque ce compte est créé, on vous demande d’indiquer votre logiciel parmi ceux de la liste suivante :

Netscape Communicator ou Messenger

Microsoft Internet Explorer, Outlook et Outlook Express

Lotus Notes R5 Navigateur

Opera Mandataire web

C2Net SafePassage

pour télécharger le certificat X509 qui s’installera automatiquement (pour l’anecdote, j’ai demandé un certificat pour Netscape en utilisant MSIE et le site de Thawte s’en est plaint). Le processus peut afficher un certain nombre de fois le message « Cliquez sur OK, sauf si vous savez ce que vous faites » et ceux qui pensent savoir ce qu’ils font y trouveront sûrement matière à sourire. À la fin, le jeu se termine sans expliquer ce qui se passera ensuite, mais vous trouverez dans votre boîte aux lettres l’URL où récupérer le certificat : lorsqu’on se rend à l’adresse indiquée, le certificat s’installe de lui-même. Enfin, on vous indique que vous pouvez voir votre nouvelle acquisition :

To view the certificate in MSIE 4, select View->Internet Options->Content and then press the button for "Personal" certificates. To view the certificate in MSIE 5, select Tools->Internet Options->Content and then press the button for "Certificates".

Obtention du certificat de la CA

Le « certificat client » que nous venons d’acquérir n’a de valeur que s’il a été produit par une autorité responsable et reconnue. Pour prouver que c’est le cas, nous avons besoin d’un certificat de CA établissant que Thawte est l’autorité en question. Comme c’est un point important, vous pourriez penser que cette opération est facile à réaliser mais, pour des raisons incompréhensibles, Thawte et Verisign compliquent véritablement la recherche de leurs certificats de CA. À partir de la page http://www.thawte.com, entrez root trustmapping dans le champ de recherche, puis suivez le premier lien donné en résultat.

Nous avons placé ce fichier dans /usr/www/APACHE3/ca_cert -- bien au-dessus de la racine d’Apache. Puis, nous avons ajouté la ligne suivante au fichier de configuration :

SSLCACertificateFile /usr/www/APACHE3/ca_cert/persfree.crt

Puis, nous avons lancé Apache, qui a bien démarré mais qui a produit la ligne suivante dans error_log :

...

[<date>][error] mod_ssl: Init: (sales.butterthlies.com:443) Unable to configure

verify locations for client authentication

 

ce qui semble indiquer que quelque chose ne va pas. Le problème est que le certificat de Thawte est au format DER alors qu’il devrait être au format PEM. Le premier est simplement un contenu binaire brut, tandis que le second est encodé en base64 avec un léger enrobage. Pour passer de l’un à l’autre, il suffit de faire :

openssl x509 -in persfree.crt -inform DER -out persfree2.crt

Après avoir modifié le fichier de configuration pour qu’il désigne persfree2.crt, nous avons relancé Apache : cette fois-ci, error_log contenait une ligne indiquant "...mod_ssl/3.0a0 OpenSSL/0.9.6b configured..." -- ce qui est bon signe. Cependant, lorsque nous avons tenté d’accéder à sales.butterthlies.com, cela a échoué et nous avons trouvé la ligne suivante dans error_log :

...[error] mod_ssl: Certificate Verification: Certificate Chain too long

chain has 2 cerificates, but maximum allowed are only 1)

Ce problème se règle facilement en ajoutant une ligne au début du fichier de configuration :

...

SSLVerifyDepth 2

....

Désormais, tout fonctionne et nous avons un site raisonnablement sécurisé. Le fichier de configuration final est :

User webuser

Group webgroup

 

LogLevel notice

LogFormat "%h %l %t \"%r\" %s %b %a %{user-agent}i %U" sidney

 

#SSLCacheServerPort 1234

#SSLCacheServerPath /usr/src/apache/apache_1.3.19/src/modules/ssl/gcache

SSLSessionCache dbm:/usr/src/apache/apache_1.3.19/src/modules/ssl/gcache

SSLCertificateFile /usr/src/apache/apache_1.3.19/SSLconf/conf/new1.cert.cert

SSLCertificateKeyFile /usr/src/apache/apache_1.3.19/SSLconf/conf/privkey.pem

SSLCACertificateFile /usr/www/APACHE3/ca_cert/persfree2.crt SSLVerifyDepth 2

SSLVerifyClient require

SSLSessionCacheTimeout 3600

 

Listen 192.168.123.2:80

Listen 192.168.123.2:443

 

<VirtualHost 192.168.123.2:80>

SSLEngine off

ServerName www.butterthlies.com

DocumentRoot /usr/www/APACHE3/site.virtual/htdocs/customers

ErrorLog /usr/www/APACHE3/site.ssl/apache_2/logs/error_log

CustomLog /usr/www/APACHE3/site.ssl/apache_2/logs/butterthlies_log sidney

</VirtualHost>

 

<VirtualHost 192.168.123.2:443>

SSLEngine on

ServerName sales.butterthlies.com

 

DocumentRoot /usr/www/APACHE3/site.virtual/htdocs/salesmen

ErrorLog /usr/www/APACHE3/site.ssl/apache_2/logs/error_log

CustomLog /usr/www/APACHE3/site.ssl/apache_2/logs/butterthlies_log sidney

 

<Directory /usr/www/APACHE3/site.virtual/htdocs/salesmen>

AuthType Basic

AuthName darkness

AuthUserFile /usr/www/APACHE3/ok_users/sales

AuthGroupFile /usr/www/APACHE3/ok_users/groups

Require group cleaners

</Directory>

</VirtualHost>

Apache La référence
titlepage.xhtml
APACHE-la-REF_split_000.htm
APACHE-la-REF_split_001.htm
APACHE-la-REF_split_002.htm
APACHE-la-REF_split_003.htm
APACHE-la-REF_split_004.htm
APACHE-la-REF_split_005.htm
APACHE-la-REF_split_006.htm
APACHE-la-REF_split_007.htm
APACHE-la-REF_split_008.htm
APACHE-la-REF_split_009.htm
APACHE-la-REF_split_010.htm
APACHE-la-REF_split_011.htm
APACHE-la-REF_split_012.htm
APACHE-la-REF_split_013.htm
APACHE-la-REF_split_014.htm
APACHE-la-REF_split_015.htm
APACHE-la-REF_split_016.htm
APACHE-la-REF_split_017.htm
APACHE-la-REF_split_018.htm
APACHE-la-REF_split_019.htm
APACHE-la-REF_split_020.htm
APACHE-la-REF_split_021.htm
APACHE-la-REF_split_022.htm
APACHE-la-REF_split_023.htm
APACHE-la-REF_split_024.htm
APACHE-la-REF_split_025.htm
APACHE-la-REF_split_026.htm
APACHE-la-REF_split_027.htm
APACHE-la-REF_split_028.htm
APACHE-la-REF_split_029.htm
APACHE-la-REF_split_030.htm
APACHE-la-REF_split_031.htm
APACHE-la-REF_split_032.htm
APACHE-la-REF_split_033.htm
APACHE-la-REF_split_034.htm
APACHE-la-REF_split_035.htm
APACHE-la-REF_split_036.htm
APACHE-la-REF_split_037.htm
APACHE-la-REF_split_038.htm
APACHE-la-REF_split_039.htm
APACHE-la-REF_split_040.htm
APACHE-la-REF_split_041.htm
APACHE-la-REF_split_042.htm
APACHE-la-REF_split_043.htm
APACHE-la-REF_split_044.htm
APACHE-la-REF_split_045.htm
APACHE-la-REF_split_046.htm
APACHE-la-REF_split_047.htm
APACHE-la-REF_split_048.htm
APACHE-la-REF_split_049.htm
APACHE-la-REF_split_050.htm
APACHE-la-REF_split_051.htm
APACHE-la-REF_split_052.htm
APACHE-la-REF_split_053.htm
APACHE-la-REF_split_054.htm
APACHE-la-REF_split_055.htm
APACHE-la-REF_split_056.htm
APACHE-la-REF_split_057.htm
APACHE-la-REF_split_058.htm
APACHE-la-REF_split_059.htm
APACHE-la-REF_split_060.htm
APACHE-la-REF_split_061.htm
APACHE-la-REF_split_062.htm
APACHE-la-REF_split_063.htm
APACHE-la-REF_split_064.htm
APACHE-la-REF_split_065.htm
APACHE-la-REF_split_066.htm
APACHE-la-REF_split_067.htm
APACHE-la-REF_split_068.htm
APACHE-la-REF_split_069.htm
APACHE-la-REF_split_070.htm
APACHE-la-REF_split_071.htm
APACHE-la-REF_split_072.htm
APACHE-la-REF_split_073.htm
APACHE-la-REF_split_074.htm
APACHE-la-REF_split_075.htm
APACHE-la-REF_split_076.htm
APACHE-la-REF_split_077.htm
APACHE-la-REF_split_078.htm
APACHE-la-REF_split_079.htm
APACHE-la-REF_split_080.htm
APACHE-la-REF_split_081.htm
APACHE-la-REF_split_082.htm
APACHE-la-REF_split_083.htm
APACHE-la-REF_split_084.htm
APACHE-la-REF_split_085.htm
APACHE-la-REF_split_086.htm
APACHE-la-REF_split_087.htm
APACHE-la-REF_split_088.htm
APACHE-la-REF_split_089.htm
APACHE-la-REF_split_090.htm
APACHE-la-REF_split_091.htm
APACHE-la-REF_split_092.htm
APACHE-la-REF_split_093.htm
APACHE-la-REF_split_094.htm
APACHE-la-REF_split_095.htm
APACHE-la-REF_split_096.htm
APACHE-la-REF_split_097.htm
APACHE-la-REF_split_098.htm
APACHE-la-REF_split_099.htm
APACHE-la-REF_split_100.htm
APACHE-la-REF_split_101.htm
APACHE-la-REF_split_102.htm
APACHE-la-REF_split_103.htm
APACHE-la-REF_split_104.htm
APACHE-la-REF_split_105.htm
APACHE-la-REF_split_106.htm
APACHE-la-REF_split_107.htm
APACHE-la-REF_split_108.htm
APACHE-la-REF_split_109.htm
APACHE-la-REF_split_110.htm
APACHE-la-REF_split_111.htm
APACHE-la-REF_split_112.htm
APACHE-la-REF_split_113.htm
APACHE-la-REF_split_114.htm
APACHE-la-REF_split_115.htm
APACHE-la-REF_split_116.htm
APACHE-la-REF_split_117.htm
APACHE-la-REF_split_118.htm
APACHE-la-REF_split_119.htm
APACHE-la-REF_split_120.htm
APACHE-la-REF_split_121.htm
APACHE-la-REF_split_122.htm
APACHE-la-REF_split_123.htm
APACHE-la-REF_split_124.htm
APACHE-la-REF_split_125.htm
APACHE-la-REF_split_126.htm
APACHE-la-REF_split_127.htm
APACHE-la-REF_split_128.htm
APACHE-la-REF_split_129.htm
APACHE-la-REF_split_130.htm
APACHE-la-REF_split_131.htm
APACHE-la-REF_split_132.htm
APACHE-la-REF_split_133.htm
APACHE-la-REF_split_134.htm
APACHE-la-REF_split_135.htm
APACHE-la-REF_split_136.htm
APACHE-la-REF_split_137.htm
APACHE-la-REF_split_138.htm
APACHE-la-REF_split_139.htm
APACHE-la-REF_split_140.htm
APACHE-la-REF_split_141.htm
APACHE-la-REF_split_142.htm
APACHE-la-REF_split_143.htm
APACHE-la-REF_split_144.htm
APACHE-la-REF_split_145.htm
APACHE-la-REF_split_146.htm
APACHE-la-REF_split_147.htm
APACHE-la-REF_split_148.htm
APACHE-la-REF_split_149.htm
APACHE-la-REF_split_150.htm
APACHE-la-REF_split_151.htm
APACHE-la-REF_split_152.htm
APACHE-la-REF_split_153.htm
APACHE-la-REF_split_154.htm
APACHE-la-REF_split_155.htm
APACHE-la-REF_split_156.htm
APACHE-la-REF_split_157.htm
APACHE-la-REF_split_158.htm
APACHE-la-REF_split_159.htm
APACHE-la-REF_split_160.htm
APACHE-la-REF_split_161.htm
APACHE-la-REF_split_162.htm
APACHE-la-REF_split_163.htm
APACHE-la-REF_split_164.htm
APACHE-la-REF_split_165.htm
APACHE-la-REF_split_166.htm
APACHE-la-REF_split_167.htm
APACHE-la-REF_split_168.htm
APACHE-la-REF_split_169.htm
APACHE-la-REF_split_170.htm
APACHE-la-REF_split_171.htm
APACHE-la-REF_split_172.htm
APACHE-la-REF_split_173.htm
APACHE-la-REF_split_174.htm