<?xml version="1.0"?>
<rss xmlns:php="http://php.net/xsl" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Connexion sécurisée à MySQL - Chicoree</title><link>http://www.chicoree.fr/w/Connexion_s%C3%A9curis%C3%A9e_%C3%A0_MySQL</link><atom:link href="http://www.chicoree.fr/w/Connexion_s%C3%A9curis%C3%A9e_%C3%A0_MySQL?action=toFeed" rel="self" type="application/rss+xml"/><description><![CDATA[La base de données est un élément critique dans l'architecture d'une application d'entreprise. Celle-ci se doit de pouvoir traiter efficacement de grandes quantités de données. Et elle peut être interrogée simultanément par de nombreux clients – éventuellement au travers d'un réseau public comme internet. Dans ces conditions on comprend qu'il est plus que nécessaire de pouvoir protéger les informations qui transitent entre la base de données et ses clients. Nous allons voir dans cet article comment utiliser SSL pour sécuriser la communication avec un serveur de bases de données MySQL.
]]></description><item><title>1 Préambule</title><link>http://www.chicoree.fr/w/Connexion_s%C3%A9curis%C3%A9e_%C3%A0_MySQL#Pr.C3.A9ambule</link><description><![CDATA[<p>Je suppose ici que vous avez déjà installé MySQL et que vous êtes un minimum familier de son utilisation. Je vais donc rapidement passer sur la création de la base qui nous servira de support. Notez tout de même que je crée au passage un utilisateur autorisé à faire des requêtes <tt>SELECT</tt> sur les tables:
</p>]]></description></item><item><title>1.1 Créer la base</title><link>http://www.chicoree.fr/w/Connexion_s%C3%A9curis%C3%A9e_%C3%A0_MySQL#Cr.C3.A9er_la_base</link><description><![CDATA[<p>Je suppose ici que vous avez déjà installé MySQL et que vous êtes un minimum familier de son utilisation. Je vais donc rapidement passer sur la création de la base qui nous servira de support. Notez tout de même que je crée au passage un utilisateur autorisé à faire des requêtes <tt>SELECT</tt> sur les tables:
</p>]]></description></item><item><title>1.2 Interroger la base avec le client MySQL</title><link>http://www.chicoree.fr/w/Connexion_s%C3%A9curis%C3%A9e_%C3%A0_MySQL#Interroger_la_base_avec_le_client_MySQL</link><description><![CDATA[<p>Comme vous le constatez, les informations stockées dans cette table sont critiques. Et vous comprenez bien que les clients n'ont pas envie que n'importe qui sache quels films ils ont loués... Faisons justement une requête qui permet d'extraire ces informations. Comme vous le remarquerez, ici cette requête sera effectuée sous l'identité de <tt>audit</tt>, l'<b>utilisateur légitime</b> de la base, dûment <b>authentifié par son mot de passe</b>:
</p>]]></description></item><item><title>2 Utiliser SSL pour sécuriser la connexion</title><link>http://www.chicoree.fr/w/Connexion_s%C3%A9curis%C3%A9e_%C3%A0_MySQL#Utiliser_SSL_pour_s.C3.A9curiser_la_connexion</link><description><![CDATA[<p>Une solution pour supprimer les risques de captures d'information par écoute directe, est d'utiliser la possibilité pour MySQL d'établir une connexion utilisant <span>SSL<span> (</span><span><i>Secure Sockets Layer</i><span>) </span></span></span> entre le client et le serveur. C'est ce que nous allons faire maintenant.
</p>]]></description></item><item><title>2.1 SSL en quelques mots</title><link>http://www.chicoree.fr/w/Connexion_s%C3%A9curis%C3%A9e_%C3%A0_MySQL#SSL_en_quelques_mots</link><description><![CDATA[<p>SSL permet de <b>crypter</b> la communication entre deux machines. Et donc de communiquer de manière sécurisée au travers d'un réseau ouvert comme internet. Outre le cryptage à proprement parler, SSL dispose également de mécanismes qui permettent de garantir l'intégrité des données transmises, de détecter la perte de données ou encore le fait que des trames soient répétées ou permutées.
</p>]]></description></item><item><title>2.2 Certificat racine</title><link>http://www.chicoree.fr/w/Connexion_s%C3%A9curis%C3%A9e_%C3%A0_MySQL#Certificat_racine</link><description><![CDATA[<p>Pour que ce mécanisme fonctionne, il va de soi que celui qui veut prouver son identité, et la personne à qui il veut le prouver doivent être d'accord pour accepter le même tiers de confiance.
</p>]]></description></item><item><title>2.3 Certificat racine autosigné</title><link>http://www.chicoree.fr/w/Connexion_s%C3%A9curis%C3%A9e_%C3%A0_MySQL#Certificat_racine_autosign.C3.A9</link><description><![CDATA[<p>Il est aussi possible de générer soi-même des certificats racine. Dans ce cas, on parle de <b><a>certificats autosignés</a></b>. Ceux-ci peuvent être utilisés exactement comme les certificats racine émis par une autorité. La différence? Et bien, comme il n'y a plus de tiers de confiance connu impliqué pour garantir votre identité, si vous émettez vos propres certificats racine, vos correspondants devront <i>vous</i> faire confiance. Par ailleurs, il faudra aussi diffuser de manière <i>fiable</i> votre certificat racine auprès de vos clients.
</p>]]></description></item><item><title>2.4 Certificat serveur</title><link>http://www.chicoree.fr/w/Connexion_s%C3%A9curis%C3%A9e_%C3%A0_MySQL#Certificat_serveur</link><description><![CDATA[<p>Pour que le serveur puisse <b>prouver son identité</b>, il est nécessaire que celui-ci fournisse un <b>certificat signé par une autorité de certification</b>. Tout d'abord, il faut commencer par générer une <b>demande de certificat</b>:
</p>]]></description></item><item><title>2.5 Certificat client</title><link>http://www.chicoree.fr/w/Connexion_s%C3%A9curis%C3%A9e_%C3%A0_MySQL#Certificat_client</link><description><![CDATA[<p>SSL permet éventuellement d'authentifier les deux parties d'une communication (le serveur <i>et</i> le client, par exemple). Cela nous servira dans un instant. On procède exactement de la même manière pour obtenir le certificat client que le certificat serveur:
</p>]]></description></item><item><title>3 Configurer le serveur pour utiliser un certificat</title><link>http://www.chicoree.fr/w/Connexion_s%C3%A9curis%C3%A9e_%C3%A0_MySQL#Configurer_le_serveur_pour_utiliser_un_certificat</link><description><![CDATA[<p>Vous pouvez configurer le serveur MySQL pour qu'il utilise un certificat pour prouver son identité et crypter la communication en modifiant le fichier de configuration de <tt>my.conf</tt>. Vous devrez rajouter les options <i>ssl-ca</i>, <i>ssl-cert</i> et <i>ssl-key</i>. Recherchez la section <i>[mysqld]</i> et modifiez ces options en conséquence:
</p>]]></description></item><item><title>4 Se connecter avec le client avec SSL</title><link>http://www.chicoree.fr/w/Connexion_s%C3%A9curis%C3%A9e_%C3%A0_MySQL#Se_connecter_avec_le_client_avec_SSL</link><description><![CDATA[<p>Pour le client, vous pouvez également utiliser <tt>my.cnf</tt> pour le configurer. Ou à la place passer les arguments nécessaires sur la ligne de commande au moment de son invocation:
</p>]]></description></item><item><title>4.1 Forcer l'utilisation de SSL</title><link>http://www.chicoree.fr/w/Connexion_s%C3%A9curis%C3%A9e_%C3%A0_MySQL#Forcer_l.27utilisation_de_SSL</link><description><![CDATA[<p>Très bien, nous <i>pouvons</i> nous connecter en utilisant SSL. Mais rien ne nous empêche pour l'instant de nous connecter <i>sans</i>! C'est à dire, comme au début de cet article, en faisant passer les données <i>en clair</i>. Il est parfois nécessaire de n'accepter <i>que</i> des communications sécurisées. Dans MySQL il est possible d'<b>exiger une communication cryptée</b> lorsque l'on fixe les permissions pour un utilisateur à l'aide de la clause <tt>REQUIRE SSL</tt> de la commande SQL <tt>GRANT</tt>:
</p>]]></description></item><item><title>4.2 Authentification mutuelle</title><link>http://www.chicoree.fr/w/Connexion_s%C3%A9curis%C3%A9e_%C3%A0_MySQL#Authentification_mutuelle</link><description><![CDATA[<p>Authentifier le serveur et exiger une communication cryptée est déjà un bon début. Mais il est parfois aussi nécessaire de vérifier l'identité du client. C'est à dire de faire l'<b><a>authentification mutuelle</a></b> du client et du serveur. Dans ce cadre, MySQL propose diverses solutions pour s'assurer avec plus ou moins de force de l'identité du client que nous allons maintenant détailler.
</p>]]></description></item><item><title>4.2.1 Forcer l'utilisation d'un certificat X.509</title><link>http://www.chicoree.fr/w/Connexion_s%C3%A9curis%C3%A9e_%C3%A0_MySQL#Forcer_l.27utilisation_d.27un_certificat_X.509</link><description><![CDATA[<p>La première manière de procéder va être d'exiger de la part du client un certificat X.509:
</p>]]></description></item><item><title>4.2.2 Forcer la vérification du sujet du certificat (SUBJECT)</title><link>http://www.chicoree.fr/w/Connexion_s%C3%A9curis%C3%A9e_%C3%A0_MySQL#Forcer_la_v.C3.A9rification_du_sujet_du_certificat_.28SUBJECT.29</link><description><![CDATA[<p>Dans la version précédente, le simple fait de fournir un certificat signé par une autorité <i>reconnue</i> par le serveur permet d'authentifier le client. Mais jusqu'à présent les informations contenues dans le certificat n'avaient pas eu d'importance.
</p>]]></description></item><item><title>4.2.3 Forcer la vérification de l'émetteur du certificat (ISSUER)</title><link>http://www.chicoree.fr/w/Connexion_s%C3%A9curis%C3%A9e_%C3%A0_MySQL#Forcer_la_v.C3.A9rification_de_l.27.C3.A9metteur_du_certificat_.28ISSUER.29</link><description><![CDATA[<p>Enfin, il est aussi possible d'exiger que le certificat fourni par le client soit <b>émis</b> (<i>signé</i>) par une certaine autorité:
</p>]]></description></item><item><title>4.2.4 Combinaisons</title><link>http://www.chicoree.fr/w/Connexion_s%C3%A9curis%C3%A9e_%C3%A0_MySQL#Combinaisons</link><description><![CDATA[<p>Pour terminer il faut signaler que les clauses <tt>REQUIRE ISSUER</tt> et <tt>REQUIRE SUBJECT</tt> peuvent être combinées. Par ailleurs, il existe aussi une clause <tt>REQUIRE CIPHER</tt> qui permet d'exiger une certaine <i>force de chiffrement</i>, et qui peut être utilisée seule ou combinée aux deux clauses mentionnées ci-dessus. Je vous invite à vous reporter à la documentation de MySQL pour en savoir plus.
</p>]]></description></item><item><title>5 Conclusion</title><link>http://www.chicoree.fr/w/Connexion_s%C3%A9curis%C3%A9e_%C3%A0_MySQL#Conclusion</link><description><![CDATA[<p>Un élément aussi critique qu'un serveur de base de données mérite bien qu'on investisse un peu de temps pour le sécuriser. Ici, nous avons parlé exclusivement de SSL, mais ne vous y trompez pas: "passer le serveur en SSL" ne suffit pas à le sécuriser! Si votre serveur est par ailleurs <i>fragile</i>, SSL ne vous "sauvera pas la mise". C'est juste un élément de plus dans l'arsenal de la sécurisation de votre serveur de bases de données. Mais un élément important!
</p>]]></description></item><item><title>6 Références</title><link>http://www.chicoree.fr/w/Connexion_s%C3%A9curis%C3%A9e_%C3%A0_MySQL#R.C3.A9f.C3.A9rences</link><description/></item></channel></rss>
