lundi 9 février 2009

Mysql 5.0 avec support du SSL sous Debian Etch

Voici comment installer un server mysql 5 avec support du SSL sous Debian Etch 4.0

apt-get install mysql-server-5.0

Si il y a des erreurs du genre "libperl paquet defectueux", verifier son /etc/apt/sources.list qui doit ressembler à ça:

#GENERAL
deb http://ftp.fr.debian.org/debian/ etch main
deb-src http://ftp.fr.debian.org/debian/ etch main

#SECURITY
deb http://security.debian.org/ etch/updates main contrib
deb-src http://security.debian.org/ etch/updates main contrib

#NON-FREE
deb http://ftp.fr.debian.org/debian stable main contrib non-free
deb-src http://ftp.fr.debian.org/debian stable main contrib non-free

Une fois le package installé, modifier ensuite le mot de passe root

mysql -u root
>SET PASSWORD FOR 'root'@'localhost'=PASSWORD('lemotdepasse');

#Par mesure de securité on vire les utilisateurs anonymes si il y a
>DELETE FROM mysql.user WHERE user='';

Puis on modifie le fichier /etc/mysql/my.cnf comme suit

#PARAMETRES AJOUTES
wait_timeout = 60
connect_timeout = 10
interactive_timeout = 120
join_buffer_size=1M
sort_buffer_size=8M
read_buffer_size=2M
read_rnd_buffer_size=2M
key_buffer_size=64M
skip-networking

# * Fine Tuning
key_buffer = 256M
max_allowed_packet = 16M
thread_stack = 128K
thread_cache_size = 8
max_connections = 100
table_cache = 1024
query-cache-type = 1
query_cache_limit = 2M
query_cache_size = 128M

Et on redemarre mysql pour appliquer les changements

/etc/init.d/mysql restart

Maintenant nous allons apporter le support SSL

Par défaut, le paquet Debian n'est pas configuré avec le SSL. Il faut le recompiler.

Installer les paquetages suivants necessaires à la compilation:

apt-get install dpkg-dev
apt-get install devscripts
apt-get install gcc
apt-get install libtool
apt-get install debhelper
apt-get install libncurses5-dev
apt-get install libwrap0-dev
apt-get install zlib1g-dev
apt-get install libreadline5-dev
apt-get install chrpath
apt-get install automake1.9
apt-get install doxygen
apt-get install tetex-bin
apt-get install tetex-extra
apt-get install gs
apt-get install dpatch
apt-get install gawk
apt-get install bison
apt-get install openssl
apt-get install libssl-dev

Puis on recupere les sources

cd /usr/src
apt-get build-dep mysql-server
apt-get source mysql-server

Nous allons apporter la modification necessaire puis re-creer le paquet

cd mysql-dfsg-*
nano debian/rules

Remplacer la ligne 'without-openssl' par 'with-openssl'
Remplacer la ligne 'with-yassl' par 'without-yassl'

On indique le changement de version du paquet

debchange -v 5.0.32-7etch1+ssl-1 "Added SSL"

Puis taper dpkg-buildpackage qui va reconstruire le paquet. Cela dure un certain temps.

Ensuite, nous allons installer ce paquet

cd..
dpkg -i *.deb

Il peut y avoir des erreurs, dans ce cas là, recommencer dpkg -i *.deb et normalement ça passe.

Nous allons demander à Debian de ne plus mettre à jours ces paquets lors de l'apt-get upgrade. Attention à bien vous informer si une faille venait à etre decouverte...

echo "libmysqlclient15-dev hold"|dpkg --set-selections
echo "libmysqlclient15off hold"|dpkg --set-selections
echo "mysql-client hold"|dpkg --set-selections
echo "mysql-client-5.0 hold"|dpkg --set-selections
echo "mysql-server hold"|dpkg --set-selections
echo "mysql-server-5.0 hold"|dpkg --set-selections
echo "mysql-common hold"|dpkg --set-selections

Remplacer "hold" par "install" pour que Debian re-active les mises à jours automatiques si besoin.

Maintenant nous allons creer les certificats SSL pour le serveur

mkdir /etc/mysql/openssl
cd /etc/mysql/openssl/

openssl req -x509 -new -days 9999 -newkey rsa:2048 -nodes -keyout ca-key.pem -out ca-cert.pem
openssl req -new -newkey rsa:2048 -nodes -keyout server-key.pem -out server-csr.pem
openssl rsa -in server-key.pem -out server-key.pem
openssl x509 -req -days 9999 -in server-csr.pem -signkey server-key.pem -out server-crt.pem

Laissez vide pour la question `challenge password` et `suivante` s’il y a lieu.

Nous allons maintenant modifier le fichier de configuration mysql :

nano /etc/mysql/my.cnf

Repérez, modifiez et décommentez les 3 ssl dans la section [mysqld]

ssl-ca=/etc/mysql/openssl/ca-cert.pem
ssl-key=/etc/mysql/openssl/server-key.pem
ssl-cert=/etc/mysql/openssl/server-cert.pem

Redémarrer MySQL
/etc/init.d/mysql restart

Puis pour se connecter en SSL, taper:
mysql --ssl -u root -p --ssl-ca=/dev/null

Pour verifier que le SSL est bien activé, saisir la requete suivante
SHOW VARIABLES LIKE 'have_openssl';

Et voilà c'est tout! Pour activer les accès depuis l'exterieur il faudra commenter la ligne "skip-networking" et mettre pour bind-address l'adresse du serveur dans le fichier /etc/my.cnf.

On pourra autorisé l'acces seulement depuis certaines IP en jouant avec iptables et les droits d'acces de mysql, par exemple :

mysql> GRANT ALL PRIVILEGES ON test.* TO test@192.168.1.5 IDENTIFIED BY "goodsecret" REQUIRE SSL;

REQUIRE SSL indique que la connexion doit etre imperativement chiffrée.

Pour aller plus loin : http://www.lokris.net/doc/mysql/secure-grant.html

Sources :
http://momocello.com/connexion-ssl-mysql-openssl-sur-debian-etch-ou-lenny/
http://talkingcode.co.uk/2007/11/12/error-2026-hy000-ssl-connection-error-the-joy-of-mysql-ssl-on-debian/


1 commentaire:

  1. Bonjour et merci pour cette page.

    Il y a une coquille dans la ligne de commande de création du fichier server-cert.pem : il manque un e entre c et rt dans server-crt.pem, si bien que, si on exécute cette commande telle quelle, lorsque le serveur démarre, il cherche le fichier server-cert.pem, ne le trouve pas, et désactive la possibilité de connexions par SSL.

    RépondreSupprimer