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
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.
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 dansApache-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
(MettrePort
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.
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.
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/
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.)
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
.
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".
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
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:
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:
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
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!?]
Virtual Host
ou Listen
est incorrecte !
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 !
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)