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)

- Version d'origine (anglais) par Matt Raible
- Version source (anglais) par Balázs Bárány
- Version espagnole par Sergio Artigas
- Version française par Jean-François Moreau

Revue le 26 septembre 2002 par Matt Raible pour Apache 2.0.42. Version d'origine http://tud.at/programm/apache-ssl-win32-howto.php3.

Problèmes soumis par les utilisateurs

2002-11-26, Daniel Nixon, Q : Utilisation de http pour des requêtes SSL
    Q: SSL ne marche pas dans le navigateur et j'ai les lignes suivantes dans le logfile :
    
    [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!?]
    
    J'ai constaté que cela arrive aussi en employant http comme protocole dans l'url,
    au lieu de https. Par exemple, accès à http://mysite:443/ retourne une erreur
    "Bad Request" au niveau du navigateur (et l'erreur ci-dessus dans le fichier error.log),
    qui est résolu en employant https://mysite/.

2002-10-21, Chris Parker, Q : ouvrir ssl et cygwin
    FWIW - J'utilise Windows NT 4.0 SP6a, Apache 2.043 et la dernière
    version de Cygwin du 16 octobre - ils n'emploient plus de numéros de version.

    1:
     RE : "Vous aurez besoin d'un fichier config pour openssl.exe.
     Si vous utilisez Cygwin, il en existe surement déjà un pour vous."
     Je n'ai _pas_ de fichier "openssl.cnf" dans Cygwin,
     il n'a été inclus non plus avec les fichiers binaires d'OpenSSL.
     J'ai téléchargé un fichier d'exemple sur Internet
     http://tinyurl.com/3fw3
     (le troisième résultat GOOGLE quand j'ai cherché "openssl.cnf").

    2:
     Quand j'ai saisi "openssl req -new -out server.csr" -
     d'abord j'ai vu "Using configuration from /usr/local/ssl/openssl.cnf",
     ensuite j'ai reçu le message d'erreur "Unable to load config info"
     bien qu'openssl.cnf soit effectivement dans /usr/local/ssl/
     (ok, c'était en réalité C:\Cygwin\usr\local\ssl\).
     Pour résoudre ce problème, j'ai simplement fait une copie d'openssl.cnf
     dans le répertoire d'openssl.exe,
     ensuite dans la console Cygwin j'ai tapée
     'export OPENSSL_CONF="./openssl.cnf"'.
     Toutes les commandes d'openssl ont fonctionné normalement après cela.
     J'ai trouvé quelques discussions concernant cette question
     en recherchant dans de vieux forums de discussion,
     c'est semble t-il un problème récurrent dans Cygwin.

    3:
     La commande de création de certificat x.509 est la suivante
     "openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 365"
     (Notez : serveur.CRT), tandis que pour l'hôte virtuel il y a
     "SSLCertificateFile conf/ssl/server.cert"
     (Notez : serveur.CERT) - ces deux extensions de fichier doivent être identiques.

    4:
     Q: SSL ne marche pas avec mon navigateur, j'ai le message suivant dans le fichier de log :
     R: Message explicite s'il en est (en anglais certes ...),
     Votre configuration Virtual Host ou Listen est incorrecte !

    Ou bien, le serveur web ou l'applet peut utiliser les chemins relatifs - c'est-à-dire
    "/path/webpage.jsp" plutôt que"https://server/path/webpage.jsp" ET
    la redirection est traitée par quelque moteur de génération de page dynamique.
    Dans mon cas, ayant le contrôleur servlet avant "/path/webpage.jsp",
    cela entraine l'erreur citée ci-dessus - je dois utiliser uniquement les URLs absolues ...

.: Vue d'ensemble :.
Cette page décrit l'installation de la version Win32 d'Apache avec l'extension mod_ssl. La version la plus récente est normalement disponible http://tud.at/programm/apache-ssl-win32-howto.php3.

Cette procédure est valable pour Windows NT, 98, ME, 2000 et XP. S'il vous plait envoyez moi (en anglais) vos suggestions et des rapports d'erreur. Vous pouvez même installer Apache avec SSL en plus de Microsoft Information d'Internet Serveur si vous en avez besoin.

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 avec mod_ssl semble être la seule solution libre (dans le discours comme dans la réalité) pour plate-forme Win32.
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.
.: Sommaire :.
  1. Installer Apache
  2. Obtenir OpenSSL and mod_ssl
  3. Créer un Certificat temporaire
  4. Configurer Apache et mod_ssl
  5. Résoudre les problèmes de connexion
  6. Problèmes fréquents
    Réactions
    Questions diverses
    Liens

Obtenez la version Win32 du serveur Web Apache à partir d'un des 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 ...)

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.
Pour Linux, pour installer Apache 2.0.42 avec mod_ssl, j'ai suivi les étapes suivantes :

J'ai pris http://httpd.apache.org/docs-2.0/install.html en référence.

$ lynx http://www.apache.org/dist/httpd/httpd-2.0.42.tar.gz
$ gzip -d httpd-2.0.42.tar.gz
$ tar xvf httpd-2.0.42.tar
$ ./configure --enable-mods-shared=most --enable-ssl=shared
$ make
$ make install

Si vous utilisez Apache 2.0.42 avec Tomcat, vous pouvez télécharger le fichier binaire mod_jk.so
http://jakarta.apache.org/builds/jakarta-tomcat-connectors/jk/release/v1.2.0/bin/linux/i386/mod_jk-2.0.42.so.
Après le téléchargement, mettez ce fichier dans votre répertoire modules
et renommez-le en mod_jk.so. Cliquez ici pour plus d'information sur la configuration d'Apache et Tomcat.

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://www.modssl.org/contrib/ et trouvez un fichier nommé Apache_X-mod_ssl_Y-openssl_Z-WIN32[-i386].zip. (Vous pouvez obtenir une version sur le site http://hunter.campbus.com/) 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://www.modssl.org/contrib/.

Vous aurez besoin d'un fichier de configuration "openssl.cnf" pour l'exécutable OpenSSL.exe. Vous en trouverez 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).

Télécharger et installer Cygwin depuis http://www.cygwin.com/.

Vous aurez besoin d'un fichier config pour openssl.exe. Si vous utilisez Cygwin, il en existe surement un pour vous. Si vous ne voulez pas installer Cygwin, il y a une application openssl.exe dans la distribution OpenSSL.
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 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.

Créez une liste d'adresses Apache/conf/ssl et déplacez-y server.key et server.crt.
Pour Linux créez deux répertoires : ssl.key et ssl.crt.
Déplacez server.crt dans ssl.crt et server.key dans ssl.key
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.
Pour Linux cette opération se fait pour vous quand vous compilez avec --enable-ssh=shared
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. (Pas nécessaire pour les versions 2.x)

Copiez le fichier ssl.conf de distrution OpenSSL dans le répertoire Apache/conf/. Pour des Windows, vous pouvez le télécharger à l'adresse http://www.raibledesigns.com/tomcat/ssl.conf (clic droit et "Enregistrer la cible sous ..."). Assurez-vous de la copie et changez les valeurs de DocumentRoot et de ServerName aux lignes 93 et 94.

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

ErrorLog logs/SSL.log
LogLevel 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 ! Autrement dit, soit vous lancez Apache avec -D SSL en ligne de commande, soit vous mettez en commentaire les balises IfDefine (début/fin) dans ssl.conf.

Note : En utilisant SSL avec des "Virtual Hosts" multiples, vous devez employer une configuration basé sur les adresses ip. Ceci parce que SSL exige que vous configuriez un port spécifique (443), tandis qu'une configuration basée sur les noms est valable pour tous les ports (*). Vous obtiendrez l'erreur suivante si vous essayez de mélanger des hôtes virtuels basés sur les noms avec SSL.

[error] VirtualHost _default_:443 -- mixing * ports and non-* ports with a NameVirtualHost address is not supported, proceeding with undefined results
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 un ¬ au début de la seconde 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, ...) ?
Vous pouvez vérifier cela en copiant openssl.exe dans répertoire à part et en l'exécutant. S'il n'arrive par a trouver certaines DLLs, c'est que vous ne les avez donc pas copiés dans les bons répertoires.
Un utilisateur m'a dit qu'il avait ce problème même en ayant tout fait correctement. Il a alors trouvé le problème : les DLLs openssl étaient mauvaises. Donc si vous avez toujours cette erreur malgré avoir fait tout correctement, essayez les DLLs d'une autre version d'modssl.org/contrib.

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 et si oui est-elle au bon endroit (après les autres lignes 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 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