Apache2 SSL sur Debian Etch

De wikiGite

Install Apache + SSL (+PHP si nécessaire)

apt-get install apache2
apt-get install openssl ssl-cert
apt-get install libapache2-mod-php5 php5-cli php5-common php5-cgi

Une fois le serveur apache installé, on doit générer un certificat, activer le support SSL dans apache et configurer les options SSL.

Générer un certificat

Générer un certificat permet de protéger le traffic entre client(s) et serveur, cependant il ne sera pas validé par une autorité de certification et provoquera des warnings.
Pour éviter ces messages, on doit obtenir un certificat validé par un vendeur de certificats SSL.

Note: Pour générer un certificat sous Sarge, il suffisait de taper "apache2-ssl-certificate", mais cette commande n'est plus disponible sous Etch. Si ssl-cert est installé, il fournit la commande make-ssl-cert :

mkdir /etc/apache2/ssl
make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem

Ou si cette commande n'est pas disponible, il faut générer les certificats à la main :

openssl req $@ -new -x509 -days 3650 -nodes -out /etc/apache2/ssl/apache.pem -keyout /etc/apache2/ssl/apache.pem

Generating a 1024 bit RSA private key
 .......................++++++
...................++++++
writing new private key to ‘/etc/apache2/apache.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]:Vienne
Locality Name (eg, city) []:Poitiers
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example SARL
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:Example SARL
Email Address []:user1@example.net

Vérifier les permissions sur le fichier .pem

chmod -R 400 /etc/apache2/ssl/

30/12/2008 Troisième solution : utiliser /usr/lib/ssl/misc/CA.sh

Editer le fichier et changer 'DAYS="days 365"' par 'DAYS="days 3650"'. Puis :

# Création d'un certificat d'autorité
/usr/lib/ssl/misc/CA.sh -newca
# Création d'un certificat pour le server web
/usr/lib/ssl/misc/CA.sh -newreq
#On auto-signe ce certificat
/usr/lib/ssl/misc/CA.sh -sign

Les fichiers sont sauvegardés sous ./demoCA. "newcert.pem" est le certificat, "newreq.pem" est la clé. On peut les nommer de façon à les reconnaitre :

mv newcert.pem host.example.com.pem
mv newreq.pem host.example.com.key

Puis :

cd demoCA
#On crypte la clé après l'avoir sauvegardée
cp host.example.com.key host.example.com-bkp
openssl rsa -in host.example.com.key-bkp -out host.example.com.key

Il ne reste plus qu'à les copiers dans le répertoire approprié et donner les bons droits :

cp host* /etc/apache2/ssl
chmod 400 /etc/apache2/ssl/host*

Ajouter le port 443 aux ports écoutés par apache, dans /etc/apache2/ports.conf

Listen 443

Activer le support SSL pour apache

a2enmod ssl
 Module ssl installed; run /etc/init.d/apache2 force-reload to enable.

Redémarrer apache pour prendre en compte les modifications

/etc/init.d/apache2 restart

Configurer SSL dans les VirtualHosts

Editer /etc/apache2/sites-available/default et changer

NameVirtualHost *

par

NameVirtualHost *:80
NameVirtualHost *:443

Configurer les Virtualhosts utilisant le port 443 hosts : ajouter

SSLEngine on
SSLCertificateFile /etc/apache2/apache.pem

Recharger la configuration apache après ces modifications

/etc/init.d/apache2 reload
  Reloading web server config… XXXX

Pour info : génération d'un certificat pour achat auprès d'une CA

Pour info, générer un certificat SSL openssl req -nodes -new -keyout mondomaine.key -out mondomaine.csr Et éventuellement bis, acheter le certificat correspondant sur cacert.org ou verisign.fr autre


Pour info : génération manuelle de certificat autosigné

Sinon certificat autosigné création manuelle :

Génération de la bi-clé

openssl genrsa -out server.key 1024

Génération du certificat autosigné

openssl req -new -x509 -days 365 -key server.key -out server.crt

Attention au champ Common Name (eg, YOUR name) : il faut mettre le même nom que le serveur.

Paramètres importants :

 -x509 : génération d'un certificat autosigné, et non d'une simple requête
 -days 3650 : le certificat est valable 3650 jours (dix ans !)
 -key server.key : la clé publique est extraite de la bi-clé précédente
 -out server.crt : le certificat est copié dans ce fichier

Vérification du certificat :

openssl x509 -in server.crt -text -noout

Création/remplacement du certificat Apache :

cat server.key > apache.pem
cat server.crt >> apache.pem.

Le certificat est autosigné, les navigateurs afficheront donc une anomalie.