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.