Ce tutoriel explique la marche à suivre pour créer vos propres Certificats de Sécurité SSL et sécuriser les services suivants : Apache, Courier, Postfix et ProFTPD. [Les remerciements pour la partie Certificats de Sécurité sont dédiés à http://fra.nksteidl.de/Erinnerungen/OpenSSL.php] ====== 1. Créez votre SSL CA ====== ===== 1.1 Installer le paquet openssl ===== Premièrement, vous devez installer le paquet openssl : apt-get install openssl ===== 1.2 Éditez le fichier de configuration openssl ===== Ensuite, le fichier de configuration openssl /etc/ssl/openssl.cnf doit être édité comme ceci (Nous prenons pour acquis que votre CA se nomme "RootCA"... vous pouvez changer ce nom si vous le voulez): Ligne 32: default_ca = RootCA Ligne 35: [ RootCA ] Ligne 37: dir = /root/RootCA Ligne 41: unique_subject = no # seulement si vous avez cette ligne Ligne 70: default_md = md5 Si vous le désirez, vous pouvez changer les valeurs de cette section [req_distinguished_name] pour refléter votre langue, dans le cas présent nous utiliserons Canada ;) : [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_default = CA countryName_min = 2 countryName_max = 2 stateOrProvinceName = Quebec stateOrProvinceName_default = Quebec localityName = Montreal localityName_default = Montreal 0.organizationName = Mon entreprise 0.organizationName_default = Mon entreprise # nous pouvons changer ceci, mais ce n'est pas obligatoire :-) #1.organizationName = Deuxième organisation (ex, compagnie) #1.organizationName_default = W3C Limité organizationalUnitName = La division de mon entreprise #organizationalUnitName_default = commonName = monNomDeDomaine.com (votre domaine à sécuriser) commonName_max = 64 emailAddress = laJoie@monNomDeDomaine.com emailAddress_max = 64 ===== 1.3 Créez les répertoires et fichiers ===== Vous allez maintenant créer les répertoires et fichiers spécifiés dans openssl.cnf : mkdir /root/RootCA # ou le répertoire où vous allez stocker votre CA cd /root/RootCA mkdir newcerts certs crl private touch index.txt # le numéro de série commence par 01 echo "01" > serial ===== 1.4 Générez les données aléatoire pour le Certificat CA ===== Vous devez installer le paquet sharutils pour pouvoir utiliser le programme de génération de données uuencode. cat /dev/urandom | uuencode -m bla | head -19 | sed "s/begin.*//g"\ | tail -18 | xargs | sed "s/ //g" > /root/RootCA/private/.rand chmod 770 /root/RootCA/private/.rand ls -alh /root/RootCA/private/.rand ===== 1.5 Créez le Certificat CA ===== Vous allez maintenant générer le Certificat CA... Générez la clé. Vous devez utiliser un mot de passe efficace - il devra rester sécuritaire pour les années à venir ! openssl genrsa -aes256 -out private/RootCA.key.pem -rand private/.rand 2048 Générez le certificat : openssl req -new -x509 -days 1827 -key private/RootCA.key.pem -out RootCA.cert.pem (-days 1827 va créer un certificat valide pendant 5 ans) Vérifiez que tout c'est bien passé et que votre certificat est valide : openssl x509 -in RootCA.cert.pem -text | less Copiez le certificat et la clé privée vers le répertoire spécifié dans openssl.cnf : cp /root/RootCA/RootCA.cert.pem /root/RootCA/cacert.pem cp /root/RootCA/private/RootCA.key.pem /root/RootCA/private/cakey.pem Mettre le certificat sous le contrôle du CA. Il doit être copié avec le numéro de série comme nom de fichier dans le répertoire certs et relié à ce dernier par son hash-value : cd /root/RootCA cp RootCA.cert.pem /root/RootCA/certs/00.pem cd /root/RootCA/certs/ ln -s 00.pem `openssl x509 -hash -noout -in 00.pem`.0 ===== 1.6 Publiez le certificat CA ===== Votre CA est initialisé et vous pouvez distribuer son certificat. Pour ce faire, renommez le fichier .cert.pem en .crt, et copiez le fichier obtenu vers un endroit accessible via internet où vos utilisateurs pourrons le télécharger : cp /root/RootCA/RootCA.cert.pem /var/www/virtual/monNomDeDomaine.com/htdocs/RootCA.crt chmod 444 /var/www/virtual/monNomDeDomaine.com/htdocs/RootCA.crt Vous pouvez maintenant importer votre certificat dans votre navigateur. Rendez-vous à l'adresse suivante : http://monNomDeDomaine.com/RootCA.crt ====== 2. Créez les certificats du serveur ====== ===== 2.1 Générez un certificat serveur ===== Tous les certificats serveur sont créés de la même façon. Vous ne devez pas créer de mot de passe pour ces certificats, car si vous le faites, vous devrez entrer le(s) mot(s) de passe à chaque (re)démarrage du serveur Apache ou d'un autre serveur relié, ce qui n'est ABSOLUMENT pas une idée gagnante ! La désactivation du mot de passe sera automatique si vous omettez l'"encryption-algorith" lors de la création de la clé privée. cd /root/RootCA openssl genrsa -out server.key.pem -rand private/.rand 2048 # Générer la clé openssl req -new -key server.key.pem -out server.req.pem # Générer le certificat openssl ca -name RootCA -in server.req.pem -out server.cert.pem # Signer le certificat avec votre CA (vous devez enter le mot de passe du CA) Déplacez le certificat vers le répertoire certs et reliez-le avec son hash-value : mv newcerts/01.pem certs/ # le certificat est nommé avec son numéro de série - donc son nom est 01.pem seulement la première fois bien sûr) cd certs ln -s 01.pem `openssl x509 -hash -noout -in 01.pem`.0 Je suppose que vous allez sauvegarder le fichier certificat original dans un sous-répertoire nommé serveur : mkdir /root/RootCA/server mv server.*.pem server/ ===== 2.2 Créez le certificat pour le serveur Apache ===== Générez un certificat tel que décrit dans la section 2.1 (ATTENTION : changer les noms de fichiers pour apache.key.pem, apache.req.pem et apache.cert.pem). Lors de la génération de apache.req.pem, entrez ceci : Organizational Unit Name []:Serveur Web Apache Common Name (eg, YOUR name) []:monNomDeDomaine.com Vous devez entrer le nom de domaine sous lequel vous voulez accéder à ispCP, sinon, vous aurez une erreur lors de l'authentification de votre certificat SSL. Après la génération du certificat, changez la configuration du fichier /etc/apache2/mods-available/ssl.conf (remplacez 512 par 2048) : SSLRandomSeed startup /dev/urandom 2048 SSLRandomSeed connect /dev/urandom 2048 Copiez ensuite les fichiers des certificats (avec les bonnes permissions d'accès) : cp apache.cert.pem apache.key.pem /etc/apache2/ssl chmod 400 /etc/apache2/ssl/apache.cert.pem /etc/apache2/ssl/apache.key.pem Avisez Apache d'écouter le port-ssl (443) - ajoutez ceci au fichier /etc/apache2/ports.conf Listen 443 Mettez en marche le mod_ssl: a2enmod ssl Finalement, ajoutez un nouveau VirtualHost, qui écoute le port 443, prêt pour le SSL : cp /etc/apache2/sites-available/00_master.conf /etc/apache2/sites-available/01_ssl_master.conf Changez le fichier 01_ssl_master.conf comme ceci : # # SSL Master Begin # # # SSL Start # SSLEngine On SSLCertificateFile /etc/apache2/ssl/apache.cert.pem SSLCertificateKeyFile /etc/apache2/ssl/apache.key.pem # # SSL End # ServerAdmin admin@monNomDeDomaine.com DocumentRoot /var/www/ispcp/gui ServerName monNomDeDomaine.com ErrorLog /var/log/apache2/users/ssl.monNomDeDomaine.com-error.log TransferLog /var/log/apache2/users/ssl.monNomDeDomaine.com-access.log CustomLog /var/log/apache2/ssl.monNomDeDomaine.com-traf.log traff CustomLog /var/log/apache2/ssl.monNomDeDomaine.com-combined.log combined # # ... rien à changer à partir d'ici # # # SSL Master End # Activez le site SSL : a2ensite 01_ssl_master.conf Rechargez le serveur Apache : /etc/init.d/apache2 reload Voilà ! Ouvrez votre navigateur et entrez https://monNomDeDomaine.com et vous verrez le login ispCP -encrypté SSL. (Les interfaces phpMyAdmin et Webmail son aussi encrptées!) ===== 2.3 Créez le certificat pour le serveur Courier ===== Premièrement, installez les paquets-ssl du serveur Courier : apt-get install courier-imap-ssl courier-pop-ssl Générez un certificat tel que décrit dans la section 2.1 (ATTENTION : changer les noms de fichiers pour courier.key.pem, courier.req.pem et courier.cert.pem). Lors de la génération de courier.req.pem, entrez ceci : Organizational Unit Name []:Serveur Courier Common Name (eg, YOUR name) []:mail.monNomDeDomaine.com Le serveur Courier a besoin d'avoir les fichiers cert et key jumelés en un seul fichier : cd /root/RootCA/server cat courier.cert.pem courier.key.pem > courier.pem Copiez les Certificats sous /etc/Courier : cd /etc/courier cp /root/RootCA/server/courier.pem . chmod 400 courier.pem ln -s courier.pem imapd.pem ln -s courier.pem pop3d.pem Vous pouvez maintenant redémarrer les serveurs courier-ssl : /etc/init.d/courier-imap-ssl restart /etc/init.d/courier-pop-ssl restart SSL est maintenant activé pour vos serveur IMAP et POP3! ===== 2.4 Créez le certificat pour le serveur ProFTPD ===== Générez un certificat tel que décrit dans la section 2.1 (ATTENTION : changer les noms de fichiers pour proftpd.key.pem, proftpd.req.pem et proftpd.cert.pem). Lors de la génération de proftpd.req.pem, entrez ceci : Organizational Unit Name []:Serveur ProFTPD Common Name (eg, YOUR name) []:ftp.monNomDeDomaine.com Copiez les fichiers dans /etc/proftpd: cd /etc/proftpd cp /root/RootCA/server/proftpd.cert.pem /root/RootCA/server/proftpd.key.pem . chmod 400 proftpd.cert.pem proftpd.key.pem Activez TLS dans /etc/proftpd.conf (décommentez ces lignes): # # SSL via TLS # TLSEngine on # on = utilisez TLS TLSLog /var/log/proftpd/ftp_ssl.log # l'emplacement du log TLSProtocol SSLv23 # SSLv23 or TLSv1 TLSOptions NoCertRequest # demander ou pas un certificat TLSRSACertificateFile /etc/proftpd/proftpd.cert.pem # le fichier SSL cert TLSRSACertificateKeyFile /etc/proftpd/proftpd.key.pem # la clé SSL TLSVerifyClient off # vérification du client Redémarrez ProFTPD: /etc/init.d/proftpd restart Yuppi! Connectez-vous à ftp.monNomDeDomaine.com via FTP avec explicit TLS/SSL. ===== 2.5 Créez le certificat pour le serveur postfix ===== Générez un certificat tel que décrit dans la section 2.1 (ATTENTION : changer les noms de fichiers pour postfix.key.pem, postfix.req.pem et postfix.cert.pem). Lors de la génération de postfix.req.pem, entrez ceci : Organizational Unit Name []:Serveur Postfix Common Name (eg, YOUR name) []:mail.monNomDeDomaine.com Copiez les fichiers vers /etc/postfix: cd /etc/postfix cp /root/RootCA/server/postfix.cert.pem /root/RootCA/server/postfix.key.pem . chmod 400 postfix.cert.pem postfix.key.pem Activez TLS/SSL dans /etc/postfix/main.cf (décommentez ces lignes): smtpd_tls_loglevel = 2 smtpd_tls_cert_file = /etc/postfix/postfix.cert.pem smtpd_tls_key_file = /etc/postfix/postfix.key.pem smtpd_use_tls = yes smtpd_tls_auth_only = no smtpd_tls_received_header = yes Redémarrez postfix: /etc/init.d/postfix restart Une petite nouvelle... Vous pouvez maintenant envoyer des courriel via une connexion encryptée SSL.. ====== 3. FINIT ! ====== Vous avez configuré votre serveur web pour ispCP, votre serveur courriel et votre serveur FTP avec une connexion encryptée SSL ! N'oubliez pas de distribuer votre certificat CA (http://monNomDeDomaine.com/RootCA.crt, n'est-ce pas?) aux personnes qui auront accès à votre serveur. Ils n'auront pas à accepter chaque certificat séparément.