08 11 | 2012

Mise en place du https avec Apache2 et mod_ssl

Rédigé par Sorrodje

Classé dans : Informatique, Mémos techniques

Encore un truc que je fais pas assez régulièrement pour avoir toutes les manips en mémoire et pour lequel je suis obligé d'aller chercher mes aides mémoire ici ou là . Voici donc un résumé pas à pas de ma mise en place d'un site en https sur un serveur Debian ou Ubuntu Server avec Apache2 et mod_SSL.  Pour un topo général sur l'intérêt du https , voir cette page simple et bien faite .

La suite de l'exemple se fait avec un nom de domaine et un certificat fournis et certifiés par Gandi .



Création du certificat avec Apache2 et mod_SSL


Il faut déjà s'assurer que mod_ssl est activé sur le serveur web. Après être passé en root ( su root ou sudo -i ) :

# a2enmod ssl

puis redémarrer le serveur pour terminer l'activation

# service apache2 restart

Pour la suite (après m'être demandé plus d'une fois où j'avais bien pu fourrer mes fichiers) , je conseille de se positionner dans dans /etc/ssl pour toute la procédure maois on fait comme on veut et on peut utiliser le répertoire de son choix pour y enregistrer les certificats ssl et les fichiers associés. C'est une question d'habitude. Là je donne MA manière de procéder

# cd /etc/ssl

y créer un répertoire dédié au domaine auquel le certificat est lié.

/etc/ssl# mkdir /etc/ssl/alter-it.org

puis se positionner à nouveau dans ce répertoire qui va accueillir au final le certificat et les éléments liés.

/etc/ssl# cd /etc/ssl/alter-it.org


Créer le .csr et le .key :

/etc/ssl/alter-it.org# openssl req -nodes -newkey rsa:2048 -keyout alter-it.org.key -out serveur.csr


A noter le alter-it.org.key qui est à personnaliser selon le nom de domaine à employer genre "tartempion.fr".key .. On peut mettre n'importe quoi mais ça fait plus propre avec le vrai nom de domaine. on peut laisser "serveur.csr" tel quel, ce fichier ne sert qu'à la création des .pem et .crt qui eux sont indispensables pour le bon fonctionnement de l'authentification.

Du coup on obtient le retour suivant avec des items à spécifier :


Generating a 2048 bit RSA private key
..+++
........+++
writing new private key to 'alter-it.org.key'
-----
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]:.
Locality Name (eg, city) []:Paris
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Alter-IT
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:alter-it.org
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

L'élément clef est surtout le nom de domaine à la ligne "Common Name" .. le reste est à adapter selon ses propres infos mais n'est ( à priori) pas essentiel.

A ce stade un


On vérifie que le .csr et le .key sont bien créés:

/etc/ssl/alter-it.org# ls 
alter-it.org.key  serveur.csr

On affiche le contenu du .csr


/etc/ssl/alter-it.org# cat serveur.csr

On peut alors copier intégralement le retour directement depuis le terminal (Maj+ctrl+C) pour aller l'utiliser auprès de l'autorité de certification et obtenir les certificats ssl


Obtenir le certificat auprès du fournisseur


Exemple ici chez Gandi ( création/regénération de certificat)

On cliquote sur la demande de création/regénération pour le domaine concerné , puis on copie/colle le contenu de notre serveur.csr dans la zone dédiée, on signale qu'on l'a crée via apache2/ModSSL , on valide les conditions blabla et c'est parti pour le cycle de création/régénération du certificat ssl. En images ça donne ça :

Ici dans l'interface générale de gestion on va cliquoter sur la petite clé à droite du nom de domaine pour aller demander la création/regénération du certificat.



On est alors orienté vers l'écran permettant de copier/coller le contenu intégral de notre serveur.csr tel qu'obtenu ci-dessus. il faut aussi spécifier qu'on l'a crée avec apache2/mod_ssl et valider qu'on est bien d'accord avec les conditions de vente.



Une fois validé le processus , on attend la suite des événements à savoir l'arrivée d'un mail sur l'adresse d'admin associée au nom de domaine :



Il s'agit là de confirmer via la saisie d'un code donné dans le mail qu'on est bien au courant de la demande et qu'on est bien d'accord. On obéit sagement donc.


Une fois le processus terminé, on peut aller récupérer le certificat et le .pem associé :



On télécharge et on enregistre les deux fichiers.




Puis il ne reste plus qu'à les uplaoder sur le serveur web et les positionner dans notre /etc/ssl/alter-it.org créé précédemment. Personnellement j'uploade via sftp et nautilus depuis Ubuntu. Au final le contenu complet du répertoire en question doit être ça:
/etc/ssl/alter-it.org# ls 
cert-alter-it.org.crt  GandiStandardSSLCA.pem  alter-it.org.key  serveur.csr

Le .csr est dorénavant inutile et on peut le supprimer si on le souhaite. On a donc nos él&ments liés à la certification. Reste maintenant à dire à Apache2 comment les utiliser.


Configuration apache2 pour le https


D'abord quelques modifications ) /etc/apache2/ports.conf pour s'assurer qu'apache écoute sur le port 443 et rajouter la directive "NameVirtualHost *:443"

/etc/ssl/alter-it.org# nano /etc/apache2/ports.conf


Le contenu de /etc/apache2/ports.conf une fois modifié:

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default
# This is also true if you have upgraded from before 2.2.9-3 (i.e. from
# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and
# README.Debian.gz

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    # If you add NameVirtualHost *:443 here, you will also have to change
    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
    # to <VirtualHost *:443>
    # Server Name Indication for SSL named virtual hosts is currently not
    # supported by MSIE on Windows XP.
    
    NameVirtualHost *:443
    Listen 443

</IfModule>

<IfModule mod_gnutls.c>
    Listen 443
</IfModule>

Comme spécifié dans les commentaires du fichier de conf ci dessus, on va modifier le /etc/apache2/sites-available/default-ssl qui commence par ça :

<IfModule mod_ssl.c>
<VirtualHost_default_:443>

pour y mettre ça à la place :
<IfModule mod_ssl.c>
<VirtualHost *:443>

Enfin on l'active :
/etc/ssl/alter-it.org# a2ensite default-ssl

et on recharge la configuration apache2 :
/etc/ssl/alter-it.org# service apache2 reload


On peut alors créer le Virtualhost dédié à l'accès en https à notre alter-it.org ( ou rajouter une partie dédiée au https dans le virtualhost existant).
/etc/ssl/alter-it.org# nano /etc/apache2/sites-available/vhost_alter-it.org

Le nom vhost_alter-it.org est un exemple, on peut choisir le nom qu'on veut.

Exemple de contenu de base avec les éléments liés au https:

<VirtualHost *:443>

        ServerName alter-it.org
        ServerAdmin
        ErrorLog /var/log/apache2/alter-it.org.log
        CustomLog /var/log/apache2/alter-it.org.log combined

        DocumentRoot /var/www/exemple
        
       
SSLengine on
SSLCertificateFile /etc/ssl/alter-it.org/cert-alter-it.org.crt
SSLCertificateKeyFile /etc/ssl/alter-it.org/alter-it.org.key
SSLCACertificateFile /etc/ssl/alter-it.org/GandiStandardSSLCA.pem

</VirtualHost>

La partie SSL permet de signifier à Apache2 l'endroit où il doit aller chercher ses ouailles pour certifier les connexions.
/etc/ssl/alter-it.org# a2ensite vhost_alter-it.org

puis
/etc/ssl/alter-it.org# service apache2 reload

Et on doit normalement avoir un accès certifié via l'URL https://alter-it.org/ au contenu de /var/www/exemple.

Si vous tombez là dessus et que ça ne fonctionne pas, vous n'avez quà vous en prendre à vous même  vous pouvez me signaler les erreurs (ce qui sera fortement apprécié) et/ou poser des questions en commentaire ;)
Mots clés : apache2, ssl, https, Ubuntu, Debian, gandi

3 commentaires

mercredi 29 janvier 2014 à 13:02 salam a dit : #1

Bonjour,
Merci pour le tuto, mais quand je m'essaye à un service apache2 reload j'ai un fail qui apparait...
C'est parce que j'ai déjà un serveur configuré que je tente de la passer en ssl?

jeudi 30 janvier 2014 à 22:56 Sorrodje a dit : #2

@salam : Sans une idée du "fail" , on va avoir du mal à te donner des pistes ;-))

mardi 01 avril 2014 à 10:33 Couz a dit : #3

Salut, merci beaucoup por ce tuto qui m'a permis de résoudre une partie de mes problèmes.
Maintenant, après avoir suivi ton tuto, et beaucoup d'autres sur le web qui sont identiques, je n'arrive pas à me connecter en https.
Je n'ai aucune erreur lorsque je redémarre apache, et dans mon navigateur, la page ne se charge tout simplement pas, sans erreur non plus.. (l'absence d'erreurs, c'est vraiment l'angoisse...).
J'ai également créé le fichier de log dans mon VHost, comme tu l'as fait, mais le seul message qui y apparait est : [warn] RSA server certificate CommonName (CN) `nom_de_la_machine.exemple.com' does NOT match server name!?
Selon mes recherches, cette erreur n'est pas bloquante, ça ne devrait pas venir de là.
Bref, si tu as une idée, je t'en serais très reconnaissant.

Écrire un commentaire

Quelle est la troisième lettre du mot xtal ? : 

Archives

Contrat Creative Commons
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Partage à l'Identique 2.0 France
.