Après plusieurs tutoriels sur l’installation de ISPConfig 3, nous verrons aujourd’hui comment sécuriser une installation ISPConfig avec un certificat signé. (Un second article suivra sous peu pour une procédure permettant d’installer différents certificats signés pour plusieurs sites web gérés par ISPConfig.)
Ce tutoriel est basé sur le très bon tutoriel disponible sur le site de Howtoforge.com dont le lien est disponible ci-dessous (en anglais.)
http://www.howtoforge.com/securing-your-ispconfig-3-installation-with-a-free-class1-ssl-certificate-from-startssl
Rapide introduction
Afin de clarifier un peu les idées et pour comprendre comment fonctionne les différents certificats entre eux, voici un résumé des différents fichiers importants:
- clé privée (*.key)
Il s’agit comme son nom l’indique d’une clé privée générée par le serveur et qui ne doit jamais être communiquée à l’extérieur. Élément de base des certificats, elle est utilisée pour vérifier l’authentification du serveur. - demande de signature de certificat (*.csr)
Afin de pouvoir demander à une autorité de certification de générer un certificat public signé, il est nécessaire de fournir un document différent lié à la clé privé tout en permettant l’authentification du demandeur. - certificat (*.crt)
Le certificat à proprement parler sera celui envoyé au client lors d’une requête sécurisée (https ou autre) Il peut être signé localement (mais n’est en général dans ce cas pas reconnu) ou bien généré (et signé) par une autorité de certification reconnue. (Il est alors correctement accepté par les différents navigateurs ou autres logiciels.)
Création de votre clé privée et du CSR
Avant toute chose, il convient donc de (re)créer une clé privée pour votre serveur et un Certificat Signing Request (CSR) qui vous permettra de demander la création d’un certificat signé (celui qui sera vu par les utilisateurs) sans pour autant divulguer votre clé privé. (Ce qui serait une brèche de sécurité importante.)
Penser à effectuer toutes les opérations suivantes en tant que root pour éviter les problèmes.
La génération d’une clé privée et d’un CSR peut se faire lors de l’installation d’ISPConfig. Dans ce cas, et si vous avez renseigné des paramètres corrects lors de l’installation, vous trouverez ces certificats dans le dossier /usr/local/ispconfig/interface/ssl
1 2 3 4 5 6 7 |
root@server:/# cd /usr/local/ispconfig/interface/ssl root@server:/usr/local/ispconfig/interface/ssl# l total 16 -rwxr-x--- 1 ispconfig ispconfig 2130 16 mai 21:56 ispserver.crt -rwxr-x--- 1 ispconfig ispconfig 1716 16 mai 21:56 ispserver.csr -rwxr-x--- 1 ispconfig ispconfig 3243 16 mai 21:56 ispserver.key -rwxr-x--- 1 ispconfig ispconfig 3311 16 mai 21:55 ispserver.key.secure |
Si toutefois, vous n’avez pas renseigné les champs de votre certificat correctement ou si vous souhaitez recréer ceux-ci, il existe une manipulation simple pour cela. (Si vous ne savez pas ce que contiennent vos certificats actuels ET que vous n’utilisez pas ces certificats pour d’autres services, je vous conseille fortement de les recréer de la façon suivante:
1 2 |
cd /usr/local/ispconfig/interface/ssl/ openssl req -new -newkey rsa:4096 -days 365 -nodes -keyout ispserver.key -out ispserver.csr |
Vous aurez à renseigner les champs requis pour votre certificat. (Ils ne sont pas tous obligatoire mais je vous suggère d’être exhaustifs.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Generating a 4096 bit RSA private key ...................................................................................++ .......................................................++ writing new private key to 'ispserver.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 (votre code pays) State or Province Name (full name) [Some-State]:Etat (facultatif) Locality Name (eg, city) []:Paris (Votre Ville) Organization Name (eg, company) [Internet Widgits Pty Ltd]:Nom de votre Compagnie Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:Votre nom de domaine (utilisé pour l'accès à ISPConfig) Email Address []:Une adresse mail de contact (si souhaité) Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:Mot de passe associé à votre CSR An optional company name []: |
Notez que par cette commande, vous ne recréez pas de fichier .crt Ceci est normal car nous l’obtiendrons par l’autorité de certification.
Vous devez maintenant vous retrouver avec un fichier *.key (votre clé privée) et un fichier *.csr
Le contenu du fichier CSR doit ressembler à ceci:
1 |
vi /usr/local/ispconfig/interface/ssl/ispserver.csr |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
-----BEGIN CERTIFICATE REQUEST----- MIIC7TCCAdUCAQAwgacxCzAJBgxxxxxxAkRFMRYwFAYDVQQIDA1OaWVkZXJzYWNo xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 9Z5RhXTfOz8F2wsNH5yP9eqkVlkYKpIwyUHoZtUSp+xz -----END CERTIFICATE REQUEST----- |
Demande d’un certificat signé de classe 1
Nous allons maintenant demander à une autorité de certification de signer notre certificat afin qu’il soit reconnu comme valide par les navigateurs internet et autres logiciels de messagerie.
Vous pouvez vous tourner vers diverses autorité de certification mais il en est une qui permet d’obtenir gratuitement un certificat de classe 1. (Un certicat de classe 1 ne sera pas aussi bien considéré qu’un certificat de classe 2 ou + mais c’est totalement suffisant pour nos besoin, et puis c’est gratuit…
StartSSL
C’est StartSSL qui permet la création gratuite de ces certificats. Rendez vous donc sur leur site: http://www.startssl.com/
Il vous faudra tout d’abord créer un compte sur StartSSL et le valider. Enfin, vous devrez également faire valider le domaine sur lequel pour lequel vous souhaiter créer le certificat. Une fois un domaine valider (e.g. domain.com) vous pourrez créez autant de certificat que vous le souhaitez pour autant de sous domaines choisis. (www.domain.com, webmail.domain.com…) Après 30 jours en revanche, vous devrez revalider le domaine pour créer un certificat. (Les certificats déjà créés restent bien entendu valide pour une durée de 1 an, même si vous ne revalidez pas votre domaine.)
Je ne détaillerai pas dans ce post la création de compte et validation de domaine pour ne pas surcharger cet article, l’aide de StartSSL est plutôt bien faite. N’hésitez pas à poser vos question si nécessaire en commentaires si nécessaire.
Création de votre certificat gratuit de Classe 1
Une fois votre domaine validé, il est temps de créer votre certificat.
Dans l’onglet Certificates Wizard sélectionnez Web Server SSL/TLS Certificate dans le champs Certificate Target
Cliquez sur Continue, vous arrivez sur une page qui ne nous concerne pas car nous disposons déjà d’une clé privée. Cliquez donc sur Skip afin de passer directement à l’étape suivante.
Lors de l’étape suivante, il vous sera demandé de fournir votre CSR. Nous avons dans la première partie de ce post comment l’obtenir. Il vous faut donc recopier intégralement tout le contenu du fichier /usr/local/ispconfig/interface/ssl/ispconfig.csr en incluant les lignes d’en tête et de fin. (—–BEGIN CERTIFICATE REQUEST—– et —–END CERTIFICATE REQUEST—–)
Lors des étape suivantes, vous devrez choisir le domaine pour lequel sera créé le certificat ainsi qu’un sous domaine. (Par exemple: blupgnup.com et serveur.blupgnup.com)
Notez qu’un certificat de classe 1 ne s’applique pas aux sous domaines. Ainsi le certificat créé vous permettra de sécuriser votre TLD et le sous domaine choisit. Il est donc important de choisir le sous domaine que vous utilisez pour accéder à votre interface ISPConfig dans le cas présent.
Heureusement, StartSSL nous permet de créer autant de certificats de classe 1 qu’on le souhaite pour autant de sous domaines que l’on souhaite protéger. Vous pourrez ainsi par la suite protéger www.votredomaine.com, ftp.votredomaine.com etc. Si en revanche vous souhaitez protéger tous vos domaines avec un seul certificat, il vous faudra un certificat de classe 2, et celui-ci ne sera pas gratuit (le prix n’est toutefois pas excessif.)
Après quelques instant, votre certificat est généré, vous recevrez également un mail de confirmation. Si vous souhaitez le récupérer à postériori, rendez vous dans l’onglet Toolbox puis Retrieve certificate.
Comme nous l’avons fait pour le CSR, copier intégralement le contenu du champ présenté. Après avoir fait un backup du certificat original ispserver.crt remplacez tout le contenu du fichier.
1 2 |
mv /usr/local/ispconfig/interface/ssl/ispserver.crt /usr/local/ispconfig/interface/ssl/ispserver.crt_bak vi /usr/local/ispconfig/interface/ssl/ispserver.crt |
Le contenu doit être de la forme suivante:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
-----BEGIN CERTIFICATE----- MIIHMTCCBhmgAwIBAgIDxxxxxx0GCSqGSIb3DQEBBQUAMIGMMQswCQYDVQQGEwJJ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx c2x1wonVRVmKovt2OuM1ZqZw0Ynk -----END CERTIFICATE----- |
Il vous faudra ensuite télécharger les certificats racines de StartSSL sur votre serveur,
1 2 3 |
cd /usr/local/ispconfig/interface/ssl wget https://www.startssl.com/certs/ca.pem wget https://www.startssl.com/certs/sub.class1.server.ca.pem |
puis les renommer,
1 2 |
mv ca.pem startssl.ca.crt mv sub.class1.server.ca.pem startssl.sub.class1.server.ca.crt |
Application du certificat à l’interface ISPConfig
Il ne reste alors plus qu’à effectuer une petite modification dans le fichier vhost de ISPConfig, /etc/apache2/sites-available/ispconfig.vhost
1 |
vi /etc/apache2/sites-available/ispconfig.vhost |
Il vous faut ajouter la chaîne de certificat. Rechercher la zone # SSL Configuration et ajouter la dernière ligne comme suit:
1 2 3 4 5 6 7 8 |
[...] # SSL Configuration SSLEngine On SSLCertificateFile /usr/local/ispconfig/interface/ssl/ispserver.crt SSLCertificateKeyFile /usr/local/ispconfig/interface/ssl/ispserver.key ## CertificateChainFile, à réentrer après mise à jour d'ISPConfig SSLCertificateChainFile /usr/local/ispconfig/interface/ssl/startssl.sub.class1.server.ca.crt [...] |
Il vous faudra bien veiller à modifier à nouveau votre fichier vhost après une mise à jour d’ISPConfig si celui-ci a été écrasé.
N’oubliez pas de redémarrer apache.
1 |
/etc/init.d/apache2 restart |
A ce stade, vous pouvez déjà vous connecter en https à votre interface d’administration ISPConfig. Le certificat devrait être correctement accepté par votre navigateur et vous devriez avoir la joie de voir apparaître un magnifique cadenas vert (selon les navigateurs…) Les étapes suivantes sont utile pour configurer les services associés tels que le ftp pour utiliser votre certificat ainsi créé.