Recherche


imprimer pdf
Connexion Sécurisé pour mes sites : HTTPS

Introduction

SSL (Secure Socket Layer) est destiné à crypter de façon sûre les informations échangées entre deux machines. Sur votre serveur dédié, il peut-être utile d'utiliser SSL afin de protéger des informations sensibles. Vous trouverez plus de détails sur le fonctionnement de SSL ici.

Procédure

Avant de pouvoir activer/générer un certificat SSL, il faut vérifier que l'option est bien activée sur votre machine. Apache a été compilé par défaut avec SSL, il faut juste lui indiquer qu'il doit le prendre en compte au démarrage. Ensuite vous pouvez soit acheter un certificat officiel, soit générer vous même un certificat.

"Un certificat SSL généré par vous même va provoquer une alerte d'authentification !! Ceci ne réduit en rien la sécurité apportée par ce certificat."

Activation SSL pour un premier site

Attention ! Cette procédure est indiquée pour un système RedHat

  • Via SSH :
Le serveur web simple (HTTP) fonctionne sur le port 80 , le serveur en mode SSL fonctionne sur le port 443. Nous vérifions donc d'abord si ce port est déjà écouté par Apache :

[root@crashtest root]# netstat -tanpu | grep ":443"
[root@crashtest root]#


Aucun résultat. Le serveur n'est donc pas encore activé pour le SSL. Il nous suffit donc de décommenter cette option :

[root@crashtest root]# pico /etc/sysconfig/apache


Pour décommenter nous retirons le # devant l'option en question :

# Uncomment to active SSL
OPTIONS="-DSSL"


Nous sauvegardons le fichier avec ctrl+x et 'Y' ou 'O' puis entrée et redémarrons Apache afin d'appliquer les changements.

[root@crashtest root]# /etc/init.d/httpd restart
Arrêt de httpd : [ OK ]
Démarrage de httpd : [ OK ]
[root@crashtest root]#


Si nous revérifions maintenant notre port 443 nous verrons que Apache écoute désormais sur le port 443 :

[root@crashtest root]# netstat -tanpu | grep ":443"
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 3291/httpd


  • Sécurité
Très important. Il existe une faille de sécurité très simple à exploiter dans toutes les versions d'Openssl inférieures à 0.9.6k. Il faut obligatoirement appliquer les patchs de sécurité d'OVH avant réouverture de la machine. Sinon votre machine sera hackée en quelques jours (il existe énormément de scans des réseaux faits par les hackeurs pour découvrir les machines victimes). Pour voir quelle version vous avez :

[root@crashtest root]# rpm -qa | grep ssl


Vous devez obtenir quelque chose du genre :

openssl-devel-0.9.6k-1
openssl-0.9.6k-1
openssl-perl-0.9.6k-1


Si vous avez une version antérieure à celle ci-dessus, par exemple si vous avez Openssl-0.9.6i ce n'est pas bon. Refermez le port 443. Et appliquez les patchs. Vous avez des explications sur ReleasePatchSecurite.

Certificat

Maintenant que le support SSL est activé et accessible il nous faut un certificat SSL. Vous pouvez en acheter un sur OVH : http://www.ovh.com/fr/particulier/produits/ssl.xml ou générer votre propre certificat comme expliqué ci dessous.

Via SSH

Placez vous dans le dossier des clefs ssl où vous devriez déjà trouver d'autres clefs SSL.

[root@crashtest root]# cd /usr/local/apache/conf/ssl.key


et créez votre clef avec la commande suivante : ( il faut bien sûr remplacer amplirikal.com par le domaine pour lequel vous désirez installer le certificat).

[root@crashtest ssl.key]# openssl genrsa 1024 > amplirikal.com.key


Vous pouvez sécuriser votre fichier en mettant le chmod à 400 :

[root@crashtest ssl.key]# chmod -c 400 amplirikal.com.key


Maintenant nous allons remplir la demande de certificat (CSR) et répondre aux questions qui vont être posées :

[root@crashtest ssl.key]# openssl req -new -key amplirikal.com.key > amplirikal.com.csr
Using configuration from /usr/share/ssl/openssl.cnf
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:LILLE
Locality Name (eg, city) []:LILLE
Organization Name (eg, company) [Internet Widgits Pty Ltd]:amplirikal.com




et signer le certificat :

[root@crashtest ssl.key]# openssl x509 -req -days 365 -in amplirikal.com.csr -signkey amplirikal.com.key -out amplirikal.com.crt
Signature ok
subject=/C=FR/ST=LILLE/L=LILLE/O=amplirikal.com/OU=photos/CN=Trinity/Email=raven@united-irc.org
Getting Private key
[root@crashtest ssl.key]#




Il faut encore déplacer vos fichiers dans les bons répertoires :

[root@crashtest root]# mv /usr/local/apache/conf/ssl.key/amplirikal.com.crt /usr/local/apache/conf/ssl.crt
[root@crashtest root]# mv /usr/local/apache/conf/ssl.key/amplirikal.com.csr /usr/local/apache/conf/ssl.csr


et notre certificat est prêt.

Configuration Apache

Éditons, toujours sous SSH, notre fichier httpd.conf :

[root@crashtest root]# pico /httpd.conf


Cherchez cette première section et vérifiez que le support SSL est activé :

##
## SSL Support
##
## When we also provide SSL we have to listen to the
## standard HTTP port (see above) and to the HTTPS port
##

Listen 80
Listen 443
</IfDefine>



Dans la deuxième section au niveau du "NameVirtualHost" on ajoute le l'IP avec le port 443.

#NameVirtualHost 12.34.56.78:80
#NameVirtualHost 12.34.56.78
NameVirtualHost 213.186.37.141:80
NameVirtualHost 213.186.37.141:443




Puis cherchez la troisième section et modifiez le Virtual Host par défaut pour y mettre votre certificat. Attention dans la partie suivante, nous avons coupé les lignes commentées afin que cela ne soit pas trop long. Merci de ne pas effacer ces lignes dans votre fichier mais de simplement éditer les lignes indiquées ci dessous.

<IfDefine SSL>
<VirtualHost _default_:443>
#General setup for the virtual host
DocumentRoot "/home/ampli/www"
ServerName crashtest.united-irc.com
ServerAdmin tech@United-irc.org
ErrorLog logs/error_ssl_log
TransferLog logs/access_ssl_log
#SSL Engine Switch:
#Enable/Disable SSL for this virtual host.
SSLEngine on
#Server Certificate:
SSLCertificateFile /usr/local/apache/conf/ssl.crt/amplirikal.com.crt
#Server Private Key:
SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/amplirikal.com.key




Nous avons ci-dessus indiqué l'emplacement du certificat. Maintenant, il faut encore ajouter le virtual host pour le site. Votre virtual host doit donc se situer entre <If Define SSL> et </If Define>.

<VirtualHost 213.186.37.141:443>
DocumentRoot "/home/ampli/www"
ServerName amplirikal.com
ServerAdmin tech@United-irc.org
ErrorLog logs/error_ssl_log
TransferLog logs/access_ssl_log
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /usr/local/apache/conf/ssl.crt/amplirikal.com.crt
SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/amplirikal.com.key
<Files ~ ".(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/usr/local/apache/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfDefine>



Il nous suffit de quitter httpd.conf avec ctrl+x, en confirmant les modifications et de rédemarrer Apache :

[root@crashtest www]# /etc/init.d/httpd restart
Arrêt de httpd : [ OK ]
Démarrage de httpd : [ OK ]
[root@crashtest www]#



Ajout d'un domaine supplementaire

Vous pouvez ajouter un domaine supplémentaire en ajoutant simplement aprés le premier </VirtualHost> et avant le </IFDefine> la partie VirtualHost? modifier pour le domaine supplementaire :

<VirtualHost 213.186.37.141:443>
DocumentRoot "/home/loboto/www"
ServerName lobotomotiv.org
ServerAdmin tech@United-irc.org
ErrorLog logs/error_ssl_log
TransferLog logs/access_ssl_log
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /usr/local/apache/conf/ssl.crt/amplirikal.com.crt
SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/amplirikal.com.key
<Files ~ ".(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/usr/local/apache/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent ".*MSIE.*"
nokeepalive ssl-unclean-shutdown
downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x "%r" %b"
</VirtualHost>




Conclusion

Si vous avez bien effectué les manipulations vous pouvez désormais appeler vos sites via https. N'oubliez pas qu'une alerte va s'afficher si vous utilisez un certificat que vous avez généré vous même et que pour tous les domaines UN SEUL certificat sera utilisé. Comme dans l'exemple de configuration ci-dessus, tous les domaines ajoutés dans la section "VirtualHost" vont donc répondre avec le certificat géneré au début du guide. Si vous avez besoin de mettre plusieurs sites sous https avec des certificats bien distincts, vous avez la possibilité d'utiliser vos adresses IP failover.