NetSafe - JF MOREAU
Accueil CV Contact
Informatique & Sécurité
CV - Contact -
.: Apache + SSL sur plate-forme Win32 COMMENT-FAIRE :.
Version 1.6.6 (changelog: view source)

Une nouvelle version (peut-être plus régulièrement mise à jour) de ce COMMENT-FAIRE, et qui couvre aussi Apache 2.x, est disponible à la page suivante. Vous pouvez aussi vérifier ce tutoriel (en anglais) pour Apache 2 sur Windows Server 2003 si cela vous concerne.

- Version source (anglais) par Balázs Bárány
- Version espagnole par Sergio Artigas
- Version française par Jean-François Moreau
- Danish translation maintained by Morten Fischer-Nielsen
.: Vue d'ensemble :.
Cette page décrit l'installation de la version Win32 d'Apache avec l'extension mod_ssl. La version la plus à jour est normalement toujours disponible à l'adresse http://tud.at/programm/apache-ssl-win32-howto.php3.

N'hésitez pas a m'envoyer (en anglais) vos suggestions et rapports d'erreurs. Cette procédure est valable pour Windows NT, 98, ME, 2000 et XP.
Vous pouvez même installer Apache avec SSL en plus de Microsoft IIS si vous en avez besoin.
Apache avec mod_ssl semble être la seule solution libre (dans le discours comme dans la réalité) pour plate-forme Win32.

Note: Quelques fois, il existe des différences entre les distributions précompilées d'Apache ce qui rend ce COMMENT-FAIRE incorrect. Dans ce cas, si la version courante ne fonctionne pas, téléchargez une version précédente - une publiée avant la dernière modification de ce document.
Ou si vous aimez l'aventure, essayez de la faire marcher et envoyez moi (en anglais) les modifications a faire.

Notez cependant que les versions d'Apache pour plate-forme Win32 sont considérées comme des versions bêtas et qu'elles n'atteignent pas la stabilité et les performances d'Apache sur des plates-formes Unix/Linux. Les versions 2.x sont peut-être mieux mais ce COMMENT-FAIRE ne couvre pas encore l'installation pour ces versions ...
.: Sommaire :.

Obtenez la version Win32 du serveur Web Apache sur l'un des sites miroirs. Il a un nom du genre "apache_x_y_z_win32.exe". Ce sont des archives auto-extractible qui contiennent le système de base d'Apache et des fichiers de configuration types. (NdT : Il existe aussi des versions .msi. A vous de choisir ...)

Note : Ne mélangez pas les version 1.3.x et 2.x ! Cela ne marche pas. Si vous trouvez une version 1.3.x sur modssl.org, n'espérez pas la faire marcher avec une version 2.x.

Installez Apache comme décrit dans http://www.apache.org/docs/windows.html.

Note : Vous pouvez passer cette étape et obtenir la version Apache+SSL de mod_ssl.org, comme décrit ci-dessous. Il n'y aura aucun programme d'installation mais vous n'aurez pas à écraser les fichiers Apache. C'est la meilleure solution si vous êtes expérimenté et ne craignez pas de mettre votre nez dans les fichiers de configuration (ce que vous devrez faire de toute façon).

Changez au moins les paramètres suivants dans Apache-dir/conf/httpd.conf :
[Remplacez tous les occurences de www.mon-serveur.com avec le nom de domaine réel !]
  • Remplacez Port 80 par # Port 80 (Mettre Port en commentaire n'est pas vraiment nécessaire, Listen l'ignore plus tard.)
  • Ajoutez (Si pas en supplément de IIS) Listen 80
  • Ajoutez Listen 443 (Votre serveur est alors actif sur le port de la norme SSL)
  • Ajoutez ServerName www.mon-serveur.com
  • Modifiez (Si en supplément de IIS) DocumentRoot et la commande correspondant à votre répertoire racine <Directory some-dir> (par défaut : Inetpub\wwwroot)
  • Si vous désirez utiliser PHP, configurer-le selon les instructions.
Installez le service Apache (NT/2000 seulement) et démarrez le serveur. Vérifiez que tout fonctionne avant l'installation de SSL, cela limite les sources erreurs.

Essayez http://www.my-server.dom:443/. Il ne sera pas encore chiffré, mais si cela fonctionne c'est que la configuration du port SSL (port 443) est correcte.
Allez sur le site http://hunter.campbus.com/ et trouvez un fichier nommé Apache_X-Mod_ssl_Y-Openssl_Z-Win32[-i386].zip. Téléchargez le et décompressez le dans un nouveau répertoire.
Si vous avez besoin de la version la plus récente, vous devrez le compiler vous-même si elle n'est pas là. Ne me demandez rien à ce sujet, je ne l'ai pas, je ne compile pas les versions sur modssl.org et je n'ai pas d'accès aux outils de développement sur Win32.

IMPORTANT :
Copiez les fichiers ssleay32.dll et libeay32.dll du répertoire Apache dans le répertoire WinNT\System32.
Environ 70 % des messages que je reçois viennent du fait que vous avez oublié de faire ces copies.
Si vous ne trouvez pas ces fichiers ou openssl.exe dans le fichier zip d'Apache, chercher un fichier nommé openssl-version-win32.zip à partir de http://hunter.campbus.com/

Vous aurez besoin d'un fichier de configuration pour OpenSSL.exe. En voici un ici (clic droit et "Enregistrer la cible sous ..."). Copiez le dans le répertoire contenant openssl.exe.
(C'est un fichier texte normal. Cependant, certaines configuration de Windows vous cache l'extension. Vous pouvez l'éditer avec le bloc-notes ou tout autre bon éditeur, mais cela ne devrait pas être nécessaire.)
Les instructions suivantes sont issues de la FAQ http://www.apache-ssl.org/#FAQ.
openssl req -config openssl.cnf -new -out mon-serveur.csr
Cela crée un CSR (Certificat Signing Request) et une clef privée. Lorsque l'on vous demande votre "nom de domaine", donnez le nom de domaine exact de votre serveur Web (par exemple www.mon-serveur.com, 195.125.204.24). Le certificat appartient à ce nom de serveur et les navigateurs se "plaignent" si le nom ne correspond pas.

openssl rsa -in privkey.pem -out mon-serveur.key
Cela enlève la phrase/motdepasse de la clef privée. Vous DEVEZ comprendre ce que cela signifie; mon-serveur.key doit être lisible seulement par le serveur apache et l'administrateur. Vous devez supprimer le fichier .rnd parce qu'il contient l'information d'entropie pour créer la clef et pourrait être employé pour des attaques cryptographiques contre votre clef privée.

openssl x509 -in mon-serveur.csr -out mon-serveur.cert -req -signkey mon-serveur.key -days 365
Cela crée un certificat signé que vous pouvez employer avant que vous n'en obteniez un "réel" d'une autorité de certification. (Le certificat réel est facultatif; si vous connaissez vos utilisateurs, vous pouvez leur dire d'installer le certificat dans leur(s) navigateur(s).) Notez que ce certificat expire après un an, vous pouvez modifier le délai (-days 365) si vous le désirez.

Si vous avez des utilisateurs naviguant avec MS Internet Explorer 4.x et que vous vouliez qu'ils soient capables d'installer le certificat dans leur navigateur (en le téléchargeant et en l'ouvrant), vous devez créer une version codée DER du certificat :
openssl x509 -in mon-serveur.cert -out mon-serveur.der.crt -outform DER

Créez un répertoire Apache/conf/ssl et déplacez-y les fichiers mon-serveur.key et mon-serveur.cert.
Copiez les fichiers exécutables (*.exe, *.dll, *.so) de la distribution apache-mod_ssl téléchargée sur vos répertoires d'installation d'Apache (pensez à arrêter Apache avant !).

Trouvez les directives LoadModule dans votre fichier httpd.conf et ajoutez la(es) ligne(s) suivante(s), en fonction du(es) fichier(s) que vous avez trouvé dans la distribution :

LoadModule ssl_module modules/ApacheModuleSSL.dll
ou
LoadModule ssl_module modules/ApacheModuleSSL.so
ou
LoadModule ssl_module modules/mod_ssl.so
dans les version plus récentes.

Dans les versions plus récente de la distribution, il pourrait aussi être nécessaire d'ajouter
AddModule mod_ssl.c
après la ligne LoadModule.

Ajoutez ce qui suit à la fin de httpd.conf :
# voir http://www.modssl.org/docs/2.4/ssl_reference.html pour plus d'informations
SSLMutex sem
SSLRandomSeed startup builtin
SSLSessionCache none

SSLLog logs/SSL.log
SSLLogLevel info
# Vous pouvez plus tard changer "info" en "warn" si tout est OK

<VirtualHost www.mon-serveur.com:443>
SSLEngine On
SSLCertificateFile conf/ssl/mon-serveur.cert
SSLCertificateKeyFile conf/ssl/mon-serveur.key
</VirtualHost>

N'oubliez pas d'appeler apache avec -D SSL si la directive IfDefine est active dans le fichier de configuration !

Vous pourriez devoir utiliser regedit pour changer la clef HKEY_LOCAL_MACHINE\SOFTWARE\Apache Group\Apache\X.Y.Z et la faire coïncider avec le numéro de la version d'apache.exe livré avec modssl.org/contrib si ce n'est pas la même que celle précédemment installée. (Cela semble ne pas être nécessaire avec des versions récentes).

Lancez le serveur, cette fois à partir d'une ligne de commande (pas comme service) pour voir les messages d'erreur qui empêchent Apache de démarrer. Si TOUT va bien, appuyer (si vous le voulez) sur CTRL+C pour arrêter le serveur et le lancer comme un service si vous préférez.
S'il ne fonctionne pas, Apache doit écrire des messages significatifs à l'écran et/ou dans les fichiers "error.log" et "ssl.log" dans le répertoire Apache/logs.
Si quelque chose ne fonctionne pas, mettez tout les LogLevel au maximum et examinez les fichiers de log. Ils sont très utiles.

NE M'ENVOYEZ PAS de courrier électronique ni à moi, ni à quelque contributeur que ce soit, sans avoir correctement installé Apache (Etape 1). Nous ignorerons votre demande. Nous ne sommes pas le support gratuit d'Apache et il y a assez de bonne documentation sur la configuration d'Apache. Si ce n'est pas suffisant pour vous, vous ne devriez peut-être pas essayé de mettre en place un serveur SSL. De même N'ENVOYEZ PAS de courrier électronique sans avoir examiné les fichiers "error.log" et "ssl.log" avec LogLevel positionnez à "Debug".
Les problèmes de connexion au serveur avec un navigateur ont des origines différentes, cependant beaucoup d'entre elles proviennent du client (le Proxy, le DNS, le navigateur, ...).

Ainsi, si vous rencontrez les problèmes en vous connectant via SSL, essayez avec autre navigateur et/ou examinez sa configuration. Si même cela ne marche pas, vous pouvez utiliser OpenSSL pour tenter de résoudre le problème.
NB : Pour des problèmes d'ergonomie de la page, des lignes ont été tronquées. Elle sont signalées par deux ¬ (avant et après le saut de ligne).
bb@www$ openssl s_client -connect no-such-machine:443
gethostbyname failure   # Erreur de résolution du nom par le DNS. Connexion via l'adresse IP.
connect:errno=2

bb@www$ openssl s_client -connect www1.tud.at:443
connect: Connection refused
connect:errno=111
# Aucun serveur SSL sur ce port. Vérifiez les directives Listen et Port.

bb@www$ openssl s_client -connect apcenter.apcinteractive.net:443
# Tout est OK. OpenSSL affiche les informations obtenus à partir du serveur.
CONNECTED(00000003)
depth=0 /C=at/ST=Wien/L=Wien/O=APC interactive/OU=Lifecycle ¬
¬ Management/CN=apcenter.apcinteractive.net/Email=bb@apcinteractive.net
verify error:num=18:self signed certificate
verify return:1
depth=0 /C=at/ST=Wien/L=Wien/O=APC interactive/OU=Lifecycle ¬
¬ Management/CN=apcenter.apcinteractive.net/Email=bb@apcinteractive.net
verify return:1
---
Certificate chain
 0 s:/C=at/ST=Wien/L=Wien/O=APC interactive/OU=Lifecycle ¬
¬ Management/CN=apcenter.apcinteractive.net/Email=bb@apcinteractive.net
   i:/C=at/ST=Wien/L=Wien/O=APC interactive/OU=Lifecycle ¬
¬ Management/CN=apcenter.apcinteractive.net/Email=bb@apcinteractive.net
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIC0TCCAjoCAQAwDQYJKoZIhvcNAQEEBQAwgbAxCzAJBgNVBAYTAmF0MQ0wCwYDV
[...]
9ucXUnk=
-----END CERTIFICATE-----
subject=/C=at/ST=Wien/L=Wien/O=APC interactive/OU=Lifecycle ¬
¬ Management/CN=apcenter.apcinteractive.net/Email=bb@apcinteractive.net
issuer=/C=at/ST=Wien/L=Wien/O=APC interactive/OU=Lifecycle ¬
¬ Management/CN=apcenter.apcinteractive.net/Email=bb@apcinteractive.net
---
No client certificate CA names sent
---
SSL handshake has read 1281 bytes and written 320 bytes
---
New, TLSv1/SSLv3, Cipher is EDH-RSA-DES-CBC3-SHA
Server public key is 1024 bit
SSL-Session:
    Protocol  : TLSv1
    Cipher    : EDH-RSA-DES-CBC3-SHA
    Session-ID: 49ACE1CF484A67D2C476B923D52110A6FCA1A7CE53D76DF7F233DEBF2333D4FB
    Session-ID-ctx:
    Master-Key: 00E9FA964253752294ECD69C18ADBA527B7170C112¬
¬E2B3BCB25EA8F4FD847EC46E1FF0194EF8E16985B5E38BF6F12131
    Key-Arg   : None
    Start Time: 980696025
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---
[Enter:
GET / HTTP/1.0
and press RETURN twice]
HTTP/1.1 200 OK
Date: Sun, 28 Jan 2001 15:34:58 GMT
Server: Apache/1.3.9 (Win32) mod_ssl/2.4.9 OpenSSL/0.9.4
Cache-Control: no-cache, no-store, must-revalidate, private
Expires: 0
Pragma: no-cache
X-Powered-By: PHP/4.0.4
Last-Modified: Sun, 28 Jan 2001 15:35:00 GMT
Connection: close
Content-Type: text/html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
# Le serveur affiche sa page principale
Question : J'ai le message suivant au démarrage d'Apache :
Syntax error on line [some number] of ...httpd.conf
Cannot load apache/modules/mod_ssl.so into server
(126) The module could not be found:
Réponse : Avez vous copié le fichier opensll.dll dans votre répertoire système (WINNT/SYSTEM32, WINDOWS/SYSTEM, ...) ?

Question : J'ai le message suivant au démarrage d'Apache :
Syntax error on line [some number] of apache/conf/httpd.conf:
Cannot load apache/modules/apachemodulessl.dll into server:
(127) The specified procedure could not be found:
OU
Syntax error on line [some number] of apache/conf/httpd.conf:
Invalid command 'SSLMutex', perhaps mis-spelled or defined by a module not
included in the server configuration
Réponse : Avez vous ajouté la ligne AddModule ?

Question : SSL ne marche pas avec mon navigateur et j'ai le message suivant dans le fichier de log :
[Fri Nov 16 15:46:30 2001] [error] OpenSSL: error:1407609C:SSL
routines:SSL23_GET_CLIENT_HELLO:http request [Hint: speaking HTTP to
HTTPS port!?]
Réponse : Message explicite s'il en est (en anglais certes ...), Votre configuration Virtual Host ou Listen est incorrecte !
S'il vous plait envoyez-moi un petit mot si vous avez réussi grâce à ce COMMENT-FAIRE sur Windows.
Ne nous demandez rien concernant l'installation des servlet, la recompilation de mod_ssl ou d'Apache avec EAPI, etc ... Nous n'avons aucune expérience à ce sujet et nous ne sommes incapables de vous aider. Nous sommes simplement des utilisateurs et non des développeurs.
Si vous avez des besoins particuliers, vous feriez mieux de consulter des serveurs sur Debian GNU/Linux ou OpenBSD. Cela devrait vous économiser beaucoup de peine. Sérieusement !
Serveur Web Apache : http://www.apache.org/
mod_ssl : http://www.modssl.org/
mod_ssl configuration : http://www.modssl.org/docs/2.4/ssl_reference.html
OpenSSL : http://www.openssl.org/
PHP Hypertext Preprocessor : http://www.php.net/

Auteur de ce document Balázs Bárány (http://tud.at/)
Envoyez moi vos questions, mais uniquement après avoir regardé les fichiers de log avec LogLevel debug. Vous pouvez m'écrire en Anglais, en Allemand et en Hongrois.

Contribution : Horst Bräuner (Configuration OpenSSL sur NT)
Contribution : Christoph Zich (Windows 98)
Contribution : Torsten Stanienda (Test avec 1.3.12, directive IfDefine)
Contribution : Peter Holm (Directives Listen et Port)
XHTML valable 1.0! Dernière mise à jour : 07/03/2016
Ce document peut être redistribué sous GNU Free Documentation License. © Jean-François MOREAU 2017