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épertoire dir/password.</li>

  • 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 ;</li>

    • un fichier .htpasswd contenant
      login1:enc-mdp1
      login2:enc-mdp2

      loginn sont les logins et enc-mdpn contient les mots de passe correspondant, préalablement encryptés (voir par exemple site web pour encrypter un mot de passe).</li> </ul> </li> </ul>

      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 particulier subjectAltName permettra de gérer des URL du type server-name.org et des sous-domaines du type subdomain.server-name.org. La partie default_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 partie commonName). Dans le cas où des sous-domaines sont utilisés sur le serveur, domain1.server-name.org et domain2.server-name.org, il faudra générer autant de certificats que de sous-domaines, chacun possédant une partie commonName 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 fichier root-cacert.crt. Reconfigurer ca-certificatespour qu’il utilise ce certificat d’autorité :
                dpkg-reconfigure ca-certificates

                (cocher root-cacert de self 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 fichier apache-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 defaultde 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 et ServerAlias doivent correspondre à votre serveur.</li>

                • Éditer le fichier default-sslde 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 et ServerAlias 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 et signedcert. 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>