Installation pas à pas d’un serveur Ubuntu 10.04 : Serveur Apache et SSL
Le quatrième post concerne l’installation et la configuration d’un serveur apache, notamment pour sécuriser les échanges avec celui-ci via SSL.
Coming (probably not so) soon…
Installation de apache
Apache s’installe simplement par la commande
apt-get install apache2 /etc/init.d/apache2 start
L’installation est réussie si, lorsque vous tapez dans un navigateur votre nom de domaine (ou votre adresse IP), vous avez le message : “It works!”.
Les fichiers que vous voulez rendre accessibles depuis le serveur apache sont à placer dans le répertoire /var/www/
de votre serveur.
Configuration de apache pour la prise en charge des fichiers .htaccess
Si vous souhaitez restreindre l’accès d’un répertoire du type http://nom-du-serveur.org/dir/
par login et mot de passe, une méthode consiste à placer dans /var/www/dir
un fichier nommé .htaccess et définissant les autorisations d’accès à ce répertoire. On procède de la manière suivante :
-
On édite le fichier /etc/apache2/sites-enabled/default et on y ajoute les lignes suivantes
AllowOverride all
On relance ensuite le serveur apache :/etc/init.d/apache2 reload
-
Dans le répertoire
/var/www/dir
, on crée un fichier nommé .htaccess et contenant les informations suivantes :AuthUserFile /var/www/dir/password/.htpasswd AuthGroupFile /dev/null AuthName "Entrer login et mot de passe, svp" AuthType Basic Require valid-user
En l’état, ce fichier permet l’accès au répertoire/dir
pour les utilisateurs identifiés par login et mot de passe, les logins et mots de passe étant inclus dans un fichier .htpasswd du sous-répertoiredir/password
. -
Dans le répertoire
/var/www/dir/password
, on crée deux fichiers :-
un fichier .htaccess contenant
deny from all
qui interdit l’accès au répertoire password à tout le monde ; -
un fichier .htpasswd contenant
login1:enc-mdp1 login2:enc-mdp2
oùlogin
n sont les logins etenc-mdp
n contient les mots de passe correspondant, préalablement encryptés (voir par exemple site web pour encrypter un mot de passe).
-
un fichier .htaccess contenant
Configuration pour la prise en charge de SSL
SSL est un protocole qui permet des échanges sécurisés entre le serveur apache et le navigateur web. Pour mettre en place la sécurisation des échanges par SSL, il faut disposer d’un certificat qui est signé par une autorité. Généralement, pour les serveurs privés (qui ne prétendent pas faire de commerce, par exemple), un certificat SSL auto-signé suffit (l’utilisateur aura alors un message de sécurité lui indiquant que le certificat n’est pas signé par une autorité reconnue mais une fois l’exception de sécurité acceptée, les échanges se feront bien de manière sécurisée).
Les étapes suivantes décrivent :
- comment générer un certificat d’autorité pour signer le certificat du serveur apache ;
- comment générer et signer un certificat pour le serveur apache ;
-
comment configurer le serveur apache pour qu’il utilise SSL.
-
Création d’un fichier de configuration initial,
root-cacert.cnf
: ce fichier texte contient les informations suivantes :# Configuration file example (root certificate) # Default configuration to use when one is not provided on the command line. [ ca ] default_ca = local_ca # Default location of directories and files needed to generate certificates. [ local_ca ] dir = /home/USERNAME/CertSSL certificate = $dir/root-cacert.pem database = $dir/index.txt new_certs_dir = $dir/signedcerts private_key = $dir/private/root-key.pem serial = $dir/serial # Default expiration and encryption policies for certificates. default_crl_days = 365 default_days = 1825 default_md = md5 policy = local_ca_policy x509_extensions = local_ca_extensions # Default policy to use when generating server certificates. The following # fields must be defined in the server certificate. [ local_ca_policy ] commonName = supplied stateOrProvinceName = supplied countryName = supplied emailAddress = supplied organizationName = supplied organizationalUnitName = supplied # x509 extensions to use when generating server certificates. [ local_ca_extensions ] subjectAltName = DNS:server-name.org subjectAltName = DNS:*.server-name.org basicConstraints = CA:false nsCertType = server # The default root certificate generation policy. [ req ] default_bits = 2048 default_keyfile = /home//CertSSL/private/root-key.pem default_md = md5 prompt = no distinguished_name = root_ca_distinguished_name x509_extensions = root_ca_extensions # Root Certificate Authority distinguished name. Change these fields to match # your local environment! [ root_ca_distinguished_name ] commonName = Tuxette s Root Certificate Authority stateOrProvinceName = NC countryName = FR emailAddress = my-email@server-name.org organizationName = My Home organizationalUnitName = My Office [ root_ca_extensions ] basicConstraints = CA:true
les parties
[ local_ca ]
et[ root_ca_distinguished_name ]
sont à adapter à votre environnement de travail ; en particuliersubjectAltName
permettra de gérer des URL du typeserver-name.org
et des sous-domaines du typesubdomain.server-name.org
. La partiedefault_days
donne la durée de validité de votre certificat et elle est aussi à adapter à vos besoins éventuellement.</li> -
Génération du certificat:
export OPENSSL_CONF=~/CertSSL/root-cacert.cnf openssl req -x509 -newkey rsa:2048 -out root-cacert.pem -outform PEM -days 1825
un mot de passe à conserver précieusement vous est alors demandé.</li>
-
Nettoyage du certificat:
openssl x509 -in root-cacert.pem -out root-cacert.crt
</ul>
-
un certificat SSL auto-signé pour le serveur,
apache-cert.pem
; -
une clé SSL pour le serveur,
apache-enc-key.pem
. -
Création d’un fichier de configuration pour le certificat sur serveur,
apache-cert.cnf
:# Configuration file example (server) [ req ] prompt = no distinguished_name = server_distinguished_name [ server_distinguished_name ] commonName = server-name.org stateOrProvinceName = NC countryName = FR emailAddress = my-email@server-name.org organizationName = My Home organizationalUnitName = My Office
où la partie
[ server_distinguished_name ]
doit être personnalisée (particulièrement la partiecommonName
). Dans le cas où des sous-domaines sont utilisés sur le serveur,domain1.server-name.org
etdomain2.server-name.org
, il faudra générer autant de certificats que de sous-domaines, chacun possédant une partiecommonName
personnalisée.</li> -
Génération du certificat et de la clé:
export OPENSSL_CONF=~/CertSSL/apache-cert.cnf openssl req -newkey rsa:1024 -keyout apache-key.pem -keyform PEM -out apache-temp-cert.pem -outform PEM
Un nouveau mot de passe vous est demandé, également à conserver précieusement.</li>
-
Encrypter la clé privée:
openssl rsa < apache-key.pem > apache-enc-key.pem
Le mot de passe entré précédemment est demandé.</li>
-
Signer le certificat du serveur avec le certificat d’autorité créé à la section précédente:
export OPENSSL_CONF=~/CertSSL/root-cacert.cnf openssl ca -in apache-temp-cert.pem -out apache-cert.pem
Le mode de passe du certificat d’autorité est demandé.</li>
-
Supprimer les certificats temporaires inutiles
rm apache-temp-cert.pem apache-key.pem
</ul>
-
Installation du certificat d’autorité sur le serveur : Créer un répertoire
self
dans/usr/share/ca-certificates
et y déposer le fichierroot-cacert.crt
. Reconfigurerca-certificates
pour qu’il utilise ce certificat d’autorité :dpkg-reconfigure ca-certificates
(cocher
root-cacert
deself
dans la liste des certificats).</li> -
Installation du certificat et de la clé du serveur : copier le fichier
apache-cert.pem
dans/etc/ssl/certs
et le fichierapache-enc-key.pem
dans/etc/ssl/private
. Modifier les droits sur la clé privée :chmod 400 /etc/ssl/private/apache-enc-key.pem
de manière à ce qu’elle ne soit pas lisible.</li>
-
Édition des fichiers de configuration du serveur apache : dans le répertoire,
/etc/apache2/sites-available
-
Éditer le fichier
default
de manière à ce qu’il commence par : < VirtualHost *:80>ServerAdmin my-email@server-name.org ServerName server-name.org ServerAlias www.server-name.org
où les valeurs de
ServerName
etServerAlias
doivent correspondre à votre serveur.</li> -
Éditer le fichier
default-ssl
de manière à ce qu’il commence par : < VirtualHost *:443>ServerAdmin my-email@server-name.org ServerName server-name.org ServerAlias www.server-name.org SSLEngine On SSLCertificateFile /etc/ssl/certs/apache-cert.pem SSLCertificateKeyFile /etc/ssl/private/apache-enc-key.pem
où les valeurs de
ServerName
etServerAlias
doivent correspondre à votre serveur.</li> </ul> </li> -
Configuration de apache pour SSL
a2enmod ssl rewrite a2ensite default-ssl /etc/init.d/apache2 reload
</ul> </li> </ul> </ul>
Les deux premières étapes peuvent être effectuées en local et les clés déposées ensuite sur le serveur : c’est cette approche que nous décrivons ici. Les manipulations en local sont effectuées dans un répertoire choisi par l’utilisateur (par exemple
~/CertSSL
), répertoire qui contient deux sous-répertoires,private
etsignedcert
. Vous pouvez vous connecter à votre serveur par :http://server-name.org
(non sécurisé)https://server-name.org
(sécurisé)Pour en savoir plus : Documentation Ubuntu (en anglais).
</div> -
Éditer le fichier
-
Création d’un fichier de configuration initial,