Sécurisé son site avec Apache2 / SSL (Auto-signé)
Nous allons voir dans cet article comment sécurisé son site avec apache2 via SSL
Pré-requis :
Vous devez bien entendu avoir un LAMP déjà configuré.
Methode 1 que j'avais utilisée sur Ubuntu Jaunty & Ubuntu Hardy
Dans un premier temps ajouter le module ssl :
[BASH linenumbers='false'] sudo a2enmod ssl [/BASH]
Ensuite on va éditer le script make-ssl-cert pour mettre la durée que nous voulons :
[BASH linenumbers='false'] sudo nano /usr/sbin/make-ssl-cert [/BASH]
Vers la fin du fichier deux lignes nous intéresserons :
[BASH linenumbers='false'] if [ "$1" != "generate-default-snakeoil" ]; then openssl req -config $TMPFILE -new -x509 -nodes -out $output -keyout $output > /dev/null 2>&1 [...] else openssl req -config $TMPFILE -new -x509 -nodes \\ [/BASH]
On va rajouter une durée de 10ans (-days 3650) [par défaut le certificat à une durée de 1mois] :
[BASH linenumbers='false'] if [ "$1" != "generate-default-snakeoil" ]; then openssl req -config $TMPFILE -new -x509 -days 3650 -nodes -out $output -keyout $output > /dev/null 2>&1 [...] else openssl req -config $TMPFILE -new -x509 -days 3650 -nodes \\ [/BASH]
Puis nous pouvons regarder le fichier ssleay.cnf, suivant les distributions son contenu peut être différent
[BASH linenumbers='false'] sudo nano /usr/share/ssl-cert/ssleay.cnf [/BASH]
Ici nous avons...
... ce que je trouve très bien.
Créons le certificat :
[BASH linenumbers='false'] sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/ssl/private/mon_site.pem [/BASH]
Maintenant, nous pouvons éditer un hôte virtuel :
[BASH linenumbers='false'] sudo nano /etc/apache2/sites-available/mon_site.com [/BASH]
Voici un exemple :
[APACHE linenumbers='false'] NameVirtualHost *:443 <VirtualHost *:443> SSLEngine On SSLCertificateFile /etc/ssl/private/mon_site.pem SSLCertificateKeyFile /etc/ssl/private/mon_site.pem ServerAdmin postmaster@mon_site.com DocumentRoot /chemin_vers_mon_site/www/ ServerName mon_site.com ScriptAlias /cgi-bin/ "/chemin_vers_mon_site/cgi-bin/" CustomLog /var/log/apache2/mon_site_access.log combined ErrorLog /var/log/apache2/mon_site_error.log <Directory "/chemin_vers_mon_site/www/"> Options -Indexes Includes FollowSymLinks AllowOverride all Order allow,deny Allow from all </Directory> <Directory "/chemin_vers_mon_site/cgi-bin/"> AllowOverride all Order allow,deny Allow from all #Options +ExecCGI </Directory> ServerSignature Off </VirtualHost> [/APACHE]
Pour finir nous créons un lien :
[BASH linenumbers='false'] sudo a2ensite mon_site.com [/BASH]
Il reste plus qu'à redémarrer apache :)
Methode 2 que j'avais utilisé sur Archlinux
Créons le certificat :
[BASH linenumbers='false'] cd /etc/httpd/conf openssl genrsa -des3 -out server.key 1024 openssl req -new -key server.key -out server.csr openssl rsa -in server.key.org -out server.key openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt [/BASH]
Maintenant, nous pouvons éditer un hôte virtuel :
[APACHE linenumbers='false'] NameVirtualHost *:443 <VirtualHost *:443> SSLEngine on SSLCertificateFile /etc/httpd/conf/server.crt SSLCertificateKeyFile /etc/httpd/conf/server.key ServerAdmin postmaster@mon_site.com DocumentRoot /chemin_vers_mon_site/www/ ServerName mon_site.com ScriptAlias /cgi-bin/ "/chemin_vers_mon_site/cgi-bin/" CustomLog /var/log/httpd/mon_site_access.log combined ErrorLog /var/log/httpd/mon_site_error.log <Directory "/chemin_vers_mon_site/www/"> Options -Indexes Includes FollowSymLinks AllowOverride all Order allow,deny Allow from all </Directory> <Directory "/chemin_vers_mon_site/cgi-bin/"> AllowOverride all Order allow,deny Allow from all Options +ExecCGI </Directory> ServerSignature Off </VirtualHost> [/APACHE]
Il reste plus qu'à redémarrer apache :)
Sources:
Creating a self signed SSL certificate for apache2 on Debian Lenny
Sécuriser Apache2 avec SSL
Serveur Web Apache - SSL - PHP
How to create a self-signed SSL Certificate
Pré-requis :
Vous devez bien entendu avoir un LAMP déjà configuré.
Methode 1 que j'avais utilisée sur Ubuntu Jaunty & Ubuntu Hardy
Dans un premier temps ajouter le module ssl :
[BASH linenumbers='false'] sudo a2enmod ssl [/BASH]
Ensuite on va éditer le script make-ssl-cert pour mettre la durée que nous voulons :
[BASH linenumbers='false'] sudo nano /usr/sbin/make-ssl-cert [/BASH]
Vers la fin du fichier deux lignes nous intéresserons :
[BASH linenumbers='false'] if [ "$1" != "generate-default-snakeoil" ]; then openssl req -config $TMPFILE -new -x509 -nodes -out $output -keyout $output > /dev/null 2>&1 [...] else openssl req -config $TMPFILE -new -x509 -nodes \\ [/BASH]
On va rajouter une durée de 10ans (-days 3650) [par défaut le certificat à une durée de 1mois] :
[BASH linenumbers='false'] if [ "$1" != "generate-default-snakeoil" ]; then openssl req -config $TMPFILE -new -x509 -days 3650 -nodes -out $output -keyout $output > /dev/null 2>&1 [...] else openssl req -config $TMPFILE -new -x509 -days 3650 -nodes \\ [/BASH]
Puis nous pouvons regarder le fichier ssleay.cnf, suivant les distributions son contenu peut être différent
[BASH linenumbers='false'] sudo nano /usr/share/ssl-cert/ssleay.cnf [/BASH]
Ici nous avons...
RANDFILE = $ENV::HOME/.rnd
[ req ]
default_bits = 1024
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
prompt = no
[ req_distinguished_name ]
countryName = @CountryName@
stateOrProvinceName = @StateName@
localityName = @LocalityName@
organizationName = @OrganisationName@
organizationalUnitName = @OUName@
commonName = @HostName@
emailAddress = @Email@
... ce que je trouve très bien.
Créons le certificat :
[BASH linenumbers='false'] sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/ssl/private/mon_site.pem [/BASH]
Maintenant, nous pouvons éditer un hôte virtuel :
[BASH linenumbers='false'] sudo nano /etc/apache2/sites-available/mon_site.com [/BASH]
Voici un exemple :
[APACHE linenumbers='false'] NameVirtualHost *:443 <VirtualHost *:443> SSLEngine On SSLCertificateFile /etc/ssl/private/mon_site.pem SSLCertificateKeyFile /etc/ssl/private/mon_site.pem ServerAdmin postmaster@mon_site.com DocumentRoot /chemin_vers_mon_site/www/ ServerName mon_site.com ScriptAlias /cgi-bin/ "/chemin_vers_mon_site/cgi-bin/" CustomLog /var/log/apache2/mon_site_access.log combined ErrorLog /var/log/apache2/mon_site_error.log <Directory "/chemin_vers_mon_site/www/"> Options -Indexes Includes FollowSymLinks AllowOverride all Order allow,deny Allow from all </Directory> <Directory "/chemin_vers_mon_site/cgi-bin/"> AllowOverride all Order allow,deny Allow from all #Options +ExecCGI </Directory> ServerSignature Off </VirtualHost> [/APACHE]
Pour finir nous créons un lien :
[BASH linenumbers='false'] sudo a2ensite mon_site.com [/BASH]
Il reste plus qu'à redémarrer apache :)
Methode 2 que j'avais utilisé sur Archlinux
Créons le certificat :
[BASH linenumbers='false'] cd /etc/httpd/conf openssl genrsa -des3 -out server.key 1024 openssl req -new -key server.key -out server.csr openssl rsa -in server.key.org -out server.key openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt [/BASH]
Maintenant, nous pouvons éditer un hôte virtuel :
[APACHE linenumbers='false'] NameVirtualHost *:443 <VirtualHost *:443> SSLEngine on SSLCertificateFile /etc/httpd/conf/server.crt SSLCertificateKeyFile /etc/httpd/conf/server.key ServerAdmin postmaster@mon_site.com DocumentRoot /chemin_vers_mon_site/www/ ServerName mon_site.com ScriptAlias /cgi-bin/ "/chemin_vers_mon_site/cgi-bin/" CustomLog /var/log/httpd/mon_site_access.log combined ErrorLog /var/log/httpd/mon_site_error.log <Directory "/chemin_vers_mon_site/www/"> Options -Indexes Includes FollowSymLinks AllowOverride all Order allow,deny Allow from all </Directory> <Directory "/chemin_vers_mon_site/cgi-bin/"> AllowOverride all Order allow,deny Allow from all Options +ExecCGI </Directory> ServerSignature Off </VirtualHost> [/APACHE]
Il reste plus qu'à redémarrer apache :)
Sources:
Creating a self signed SSL certificate for apache2 on Debian Lenny
Sécuriser Apache2 avec SSL
Serveur Web Apache - SSL - PHP
How to create a self-signed SSL Certificate