Tout le monde a la possibilité de se faire son propre site web avec un contrôle total dessus, au lieu d’utiliser un hébergeur web tierce, qu’il soit payant ou gratuit. Ainsi, nous avons décidé de faire un guide pour que vous soyiez capable de créer votre propre site, avec HTTPS, sur Apache2.

Nécessités

  • Un serveur/ordinateur avec un système d’exploitation basé sur Debian (Debian, Ubuntu, Mint, Tails…) avec un accès SSH et un compte sudo/root.
  • Un autre ordinateur avec un client SSH quelconque (PuTTY, MinTTY, le client intégré ssh de Windows 10, openssh-clients sur Linux Shell)
  • Posséder un nom de domaine

Options

  • Un client SCP visuel peut aider pour visualiser les fichiers. Nécessite un accès SSH sur le serveur où le site sera installé
  • Posséder un certificat SSL/TLS déjà présent

1. Associer les records DNS du serveur au nom de domaine

Avant tout, il est nécessaire de posséder un nom de domaine. Vous ne voudriez pas tout de même forcer vos visiteurs à accéder directement à l’adresse IP de votre serveur ou par le nom d’hôte (hostname) du serveur par défaut…

Dans le cas où vous n’en possédez pas encore, vous pouvez en magasiner chez multiples registrars comme Whois, 1&1, GoDaddy, et la liste est longue. Bien sûr faites attention de bien regarder leur accréditation ICANN et magasinez bien: les prix varient grandement. Vous êtes bons si vous en possédez déjà.

Ensuite, vous vous connecterez sur l’interface de votre registrar. Ainsi, vous pourrez accéder aux paramètres DNS de votre nom de domaine.

Il doit y alors avoir quelque chose du genre:

HOST
TYPE
VALUE
TTL
@
A Record
0.0.0.0
3600
www
A Record
0.0.0.0
3600

Il faut que vous changiez 0.0.0.0 pour l’adresse IP de votre serveur où vous allez mettre votre site.

Il est possible que vous ayiez une autre adresse du genre 2001:470:1f2c:d0::2 – Il s’agit d’une adresse IPv6, que vous pouvez rajouter comme un record AAAA pour les hôtes @ et www.

Généralement, vous saurez déjà l’adresse IP de votre serveur, particulièrement si vous achetez un serveur dédié ou un VPS. Sinon, ouvrez votre ordinateur où vous souhaitez mettre votre site et cherchez votre adresse IP publique. (Ouvrez vos ports 80 et 443 sur votre routeur si il s’agit de votre réseau internet de la maison).

2. Préparez votre serveur / Installez Apache2

Connectez-vous sur votre serveur via ssh:

$ ssh user@host

User correspond à votre nom d’utilisateur et host est l’adresse du serveur: adresse IP ou nom de domaine. Vous devrez ensuite entrer votre mot de passe. Vous l’avez probablement défini lorsque vous aviez initialement installé le système d’exploitation.

Il faut ensuite préparer le serveur pour Apache2, il faut donc d’abord vérifier qu’il n’y a aucune trace de Apache2 auparavant.

$ sudo apt-get purge -- auto-remove apache
$ sudo apt-get clean
$ sudo apt-get update && sudo apt-get upgrade

Désactivez tous les autres serveur HTTP utilisant les ports 80 et 443 et vous pourrez continuer.

Pour les prochaines étapes, remplacez domaine.com par votre nom de domaine que vous avez enregistré.

3. Installez Nginx

$ sudo apt-get update
$ sudo apt-get install apache2

4. Inspectez apache2.conf

$ sudo nano /etc/apache2/apache2.conf

La configuration est déjà présente et complète. Nous vous recommandons de la garder intacte, car elle est déjà adaptée pour votre système. Malgré cela, il vaut mieux que vous l’inspectiez car ils vous sera nécessaire de les connaître en cas de problème.

5. Inspectez ports.conf

$ sudo nano /etc/apache2/ports.conf

Ce fichier contient les ports dans lequel Apache2 doit marcher. Par défaut, il contient les ports 80 et 443, et supporte IPv4 et IPv6. Même si votre serveur ne supporte pas IPv6, il est recommandé de le garder dans Apache2 car IPv6 sera toujours en premier entre applications dans un même hôte local.

4. Configurer son site

Comparativement à Nginx, Apache2 est bien plus facile pour configurer son site.

Apache fonctionne en blocs comme Nginx, mais contrairement à Nginx où il faut faire des blocs server, Apache nécessite des blocs VirtualHost. C’est très équivalent. Contrairement à Nginx où on a le choix de faire des configurations centralisées (sur seulement nginx.conf) ou décentralisées (ex: utiliser sites-enabled) Apache est uniquement décentralisé.

Ainsi, voici un exemple de configuration de site Apache:

<VirtualHost *:80>
   # remplacer par votre nom de domaine
   ServerName www.domaine.com
   ServerAlias domaine.com
   # mettre votre adresse e-mail
   ServerAdmin admin@domaine.com 
   # spécifier l'emplacement de votre site sur le serveur local
   DocumentRoot /var/www/html/domaine.com
   # spécifier des emplacements pour les logs du site en cas d'erreur
   ErrorLog /emplacement/vers/fichier.log
   CustomLog /emplacement/vers/fichier.log
   # spécifier les règles d'accès
   Options FollowSymLinks 
   AllowOverride All # ici activer la possibilité de faire des paramètres par site .htaccess et .htpasswd
   Order allow,deny 
   Allow from all 
   Satisfy all

Ceci fait un site HTTP normal sans SSL.

Donc pour SSL/TLS, il suffit d’ajouter un autre bloc VirtualHost:

<VirtualHost *:443>
    ... #  reprenez la configuration du haut et collez l'INTÉRIEUR du bloc virtualhost 80 ici
    SSLEngine on
    SSLCertificateFile      /path/to/signed_certificate
    SSLCertificateChainFile /path/to/intermediate_certificate
    SSLCertificateKeyFile   /path/to/private/key

    # Uncomment the following directive when using client certificate authentication
    #SSLCACertificateFile    /path/to/ca_certs_for_client_authentication


    # HSTS (mod_headers est nécessaire) (15768000 seconds = 6 months)
    Header always set Strict-Transport-Security "max-age=15768000"
    ...
</VirtualHost>

# Configuration intermédiaire de sécurité par Mozilla changez par rapport à vos besoins
SSLProtocol             all -SSLv2 -SSLv3
SSLCipherSuite          ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
SSLHonorCipherOrder     on

5. Créer un certificat SSL

Ignorez cette étape si vous disposez déjà d’un certificat SSL de n’importe quelle autorité de certification (COMODO, GoDaddy, Certum, DigiCert, Symantec…).

Rendez-vous sur sslforfree.com pour obtenir un certificat SSL de Let’s Encrypt.

Entrez *.domaine.com et domaine.com et cliquez sur « Create free SSL certificate ».

Cliquez ensuite sur « Manual verification » et vous obtiendrez des records DNS que vous entrerez chez votre registrar dans les paramètres DNS. Une fois fait, Cliquez sur « Verify _acme-challenge.domaine.com » et les deux records devraient apparaître. Sinon, attendez le nombre de secondes spécifié dans le TTL (mettez le au minimum dans votre gestionnaire DNS, c’est important, car parfois il faut attendre jusqu’à 12 heures si vous l’avez mal configuré).

Une fois que les deux records sont apparus, cliquez sur Download SSL certificate et vous serez menés à une page avec 3 zones de texte. Il s’agit de votre certificat. Vous pourrez ensuite l’installer dans votre chemin vers les certificats SSL tels que spécifiés dans votre configuration Nginx.

Mettez la clé privée dans un fichier private.key dans le même dossier dans le chemin d’accès tel que spécifié dans votre configuration Apache. Pareil pour le certificat et pour le CA Bundle (contrairement à Nginx, Apache les veut dans 2 certificats différents).

Faites de même pour tous les sites que vous voudriez avoir à côté de celui-ci.

Copiez le certificat de votre site le plus important dans le dossier du certificat SSL par défaut ou créez un nouveau certificat SSL qui couvre tous les domaines. Il y a une limite théorique de 255 SAN qui varie en pratique selon les autorités de certification.

Une fois tout cela fait…

6. Activez votre site et redémarrez Apache

$ sudo a2ensite votre-nom-de-fichier-pour-la-config
# sudo systemctl restart nginx

Désormais, votre site marche!


Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

%d blogueurs aiment cette page :