Introduction
Trois possibilités :- si vous n'avez pas encore Apache installé sur le système : installer alors directement la version d'Apache avec le module SSL
- si vous avez déjà Apache installé mais sans le module SSL : installer alors le module SSL et l'intégrer dans Apache
- si vous avez déjà Apache installé avec le module SSL : tout est installé vous pouvez aller directement à la section suivante
Installation de Apache avec module SSL
Téléchargement
Sur Windows, pour télécharger le serveur HTTP "Apache" compilé avec le module SSL aller sur : http://httpd.apache.org/download.cgiSélectionner le lien "Win32 Binary including OpenSSL" de la version souhaitée.
Les deux versions du serveur HTTP "Apache" utilisées ici seront 2.0.63 et 2.2.10.
Les copies d'écrans ont été effectuées à partir de l'installation de la version 2.2.10.
Installation
Une fois le fichier téléchargé, le lancer pour débuter l'installation du produit.Certaines étapes de l'installation sont importantes car elles vont permettre de configurer le serveur HTTP par défaut :
- Page "Serveur Information" :
- Network domain: sqli.com
- Server Name: www.sqli.com
- Administrator's Email Address: vfinet@sqli.com
- Install for: Current user, port 8080, manually
- Page "Setup type" :
- Type: Custom
- Remarque : Pratique pour connaitre les éléments réellement installés.
- Page "Custom Setup" :
- Remarque : Tous les éléments sont sélectionnés, en particulier les binaires minimales de SSL.
Comme nous l'avons installé en mode manuel, pas étonnant de le trouver stopper.
Un nouveau menu est apparu dans le menu "Démarrer".
Il contient notamment un raccourci pour démarrer le serveur HTTP.
Pour Apache 2.0, on obtient le même résultat en lançant en ligne de commande :
$ C: $ cd "C:\Program Files\Apache Group\Apache2" $ .\bin\Apache -w -f .\conf\httpd.conf -d .Pour Apache 2.2, on obtient le même résultat en lançant en ligne de commande :
$ C: $ cd "C:\Program Files\Apache Software Foundation\Apache2.2" $ .\bin\httpd -w -f .\conf\httpd.conf -d .En ouvrant un Navigateur Internet, l'url "http://localhost:8080/" affiche la page d'accueil du serveur HTTP que vous venez d'installer.
Ceci permet de conclure que l'installation s'est bien déroulée et que la syntaxe du fichier de configuration d'Apache 2.2 est correcte.
Pour Apache 2.0, la page est différente : "Si vous lisez cette page, c'est que les propriétaires de ce domaine viennent d'installer le serveur web Apache avec succès...".Installation du module SSL sur Apache (sans module SSL)
Téléchargement
[todo...]Installation
[todo...]Remarques suite à l'installation d'Apache
Le fichier de configuration
En éditant le fichier de configuration par défaut d'Apache (C:\Program Files\Apache Software Foundation\Apache2\conf\httpd.conf) on retrouve les informations que nous avions taper lors de l'installation à différents endroits du fichier :[...] ServerAdmin vfinet@sqli.com [...] ServerName www.sqli.com:8080 [...]
Le nom de domaine
Jusqu'ici nous n'avons pas encore tapé dans le navigateur Internet le nom de domaine que nous avions renseigné lors de l'installation, à savoir "www.sqli.com".Hors si on essaye "http://www.sqli.com:8080" la requête ne va pas être interceptée par notre instance d'Apache (en local) mais par le serveur réellement appelé "www.sqli.com".
Tout se joue lors de la résolution de l'adresse www.sqli.com en adresse IP.
L'ordinateur local n'a pas été paramétré pour pouvoir résoudre l'adresse IP. Il relaie donc cette tache au serveur DNS du réseau...
Dans le cadre de nos tests, nous allons paramétrer l'ordinateur local pour qu'il reconnaisse "www.sqli.com" et redirige toutes les requêtes vers "127.0.0.1" (localhost).
Pour se faire, nous ajoutons dans le fichier "C:\WINDOWS\system32\drivers\etc\hosts" la ligne suivante:
127.0.0.1 www.sqli.com
Voici un exemple du fichier hosts par défaut de Windows :
A partir de ce moment, on peut adresser directement le nom du serveur avec l'url "http://www.sqli.com:8080".
L'ordinateur transfert alors toutes les requêtes faites à "www.sqli.com" vers l'adresse IP "127.0.0.1" qui n'est autre que l'adresse IP locale de la machine sans passer par un serveur DNS.
Activation du module SSL dans Apache
Première modification des fichiers de configuration (version 2.0 et 2.2)
Dans le fichier de configuration httpd.conf, enlever le '#' de la ligne "LoadModule ssl_module modules/mod_ssl.so" (que ce soit pour la version 2.0 ou 2.2 d'Apache).Deuxième modification des fichiers de configuration (version 2.0)
Dans la version 2.0 d'Apache, le bloc suivant permet de charger le fichier conf/ssl.conf si le module SSL est chargé.Ainsi nous n'avons pas de modification supplémentaire à apporter dans le fichier conf/httpd.conf puisque le simple fait d'activer le module va inclure la configuration SSL décrite dans le fichier indiqué.
Le fichier conf/ssl.conf sera donc parsé lors du lancement d'Apache puisque le module SSL a été activé.
Le fichier conf/ssl.conf contient par défaut les lignes principales suivantes (nous avons enlevé les lignes de commentaires et ajouté l'indentation pour une meilleure compréhension des informations contenues dans ce fichier) :
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
#SSLRandomSeed startup file:/dev/random 512
#SSLRandomSeed startup file:/dev/urandom 512
#SSLRandomSeed connect file:/dev/random 512
#SSLRandomSeed connect file:/dev/urandom 512
<IfDefine SSL>
Listen 8443
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
SSLPassPhraseDialog builtin
# SSLSessionCache none
# SSLSessionCache shmht:logs/ssl_scache(512000)
# SSLSessionCache shmcb:logs/ssl_scache(512000)
SSLSessionCache dbm:logs/ssl_scache
SSLSessionCacheTimeout 300
SSLMutex default
<VirtualHost _default_:8443>
DocumentRoot "C:/Program Files/Apache Group/Apache2/htdocs"
ServerName www.mydomain.com:8443
ServerAdmin vfinet@sqli.com
ErrorLog logs/error_log
TransferLog logs/access_log
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile conf/ssl.crt/server.crt
# SSLCertificateFile conf/ssl.crt/server-dsa.crt
SSLCertificateKeyFile conf/ssl.key/server.key
# SSLCertificateKeyFile conf/ssl.key/server-dsa.key
# SSLCertificateChainFile conf/ssl.crt/ca.crt
# SSLCACertificatePath conf/ssl.crt
# SSLCACertificateFile conf/ssl.crt/ca-bundle.crt
# SSLCARevocationPath conf/ssl.crl
# SSLCARevocationFile conf/ssl.crl/ca-bundle.crl
# SSLVerifyClient require
# SSLVerifyDepth 10
# <Location />
# SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
# and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
# and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \
# and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \
# and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20 ) \
# or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/
# </Location>
# SSLOptions +FakeBasicAuth +ExportCertData +CompatEnvVars +StrictRequire
<FilesMatch "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "C:/Program Files/Apache Group/Apache2/cgi">
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>
</IfDefine>
Deuxième modification des fichiers de configuration (version 2.2)
Dans la version 2.2 d'Apache, il faut enlever le '#' de la ligne "Include conf/extra/httpd-ssl.conf".
Le fichier conf/extra/httpd-ssl.conf sera donc parsé lors du lancement d'Apache.
On remarquera le bloc IfModule suivant définissant la propriété SSLRandomSeed. Cette définition était inclue dans le fichier de configuration SSL dans la version Apache 2.0.
Le fichier conf/extra/httpd-ssl.conf contient par défaut les lignes principales suivantes (nous avons enlevé les lignes de commentaires et ajouté l'indentation pour une meilleure compréhension des informations contenues dans ce fichier) :
Se rendre à la page http://www.openssl.org/related/binaries.html pour télécharger l'outil pour Windows.
Toujours sur Windows, si vous avez CygWin, il est possible d'avoir OpenSSL depuis cet environnement.
C'est cette dernière version que nous utiliserons dans la suite du document.
On remarquera le bloc IfModule suivant définissant la propriété SSLRandomSeed. Cette définition était inclue dans le fichier de configuration SSL dans la version Apache 2.0.
Le fichier conf/extra/httpd-ssl.conf contient par défaut les lignes principales suivantes (nous avons enlevé les lignes de commentaires et ajouté l'indentation pour une meilleure compréhension des informations contenues dans ce fichier) :
#SSLRandomSeed startup file:/dev/random 512
#SSLRandomSeed startup file:/dev/urandom 512
#SSLRandomSeed connect file:/dev/random 512
#SSLRandomSeed connect file:/dev/urandom 512
Listen 443
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
SSLPassPhraseDialog builtin
#SSLSessionCache "dbm:C:/Program Files/Apache Software Foundation/Apache2.2/logs/ssl_scache"
SSLSessionCache "shmcb:C:/Program Files/Apache Software Foundation/Apache2.2/logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300
SSLMutex default
<VirtualHost _default_:443>
DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs"
ServerName www.mydomain.com:443
ServerAdmin vfinet@sqli.com
ErrorLog "C:/Program Files/Apache Software Foundation/Apache2.2/logs/error.log"
TransferLog "C:/Program Files/Apache Software Foundation/Apache2.2/logs/access.log"
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/server.crt"
# SSLCertificateFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/server-dsa.crt"
SSLCertificateKeyFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/server.key"
# SSLCertificateKeyFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/server-dsa.key"
# SSLCertificateChainFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/server-ca.crt"
# SSLCACertificatePath "C:/Program Files/Apache Software Foundation/Apache2.2/conf/ssl.crt"
# SSLCACertificateFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/ssl.crt/ca-bundle.crt"
# SSLCARevocationPath "C:/Program Files/Apache Software Foundation/Apache2.2/conf/ssl.crl"
# SSLCARevocationFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/ssl.crl/ca-bundle.crl"
# SSLVerifyClient require
# SSLVerifyDepth 10
# <Location />
# SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
# and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
# and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \
# and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \
# and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20 ) \
# or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/
# </Location>
# SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
BrowserMatch ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
CustomLog "C:/Program Files/Apache Software Foundation/Apache2.2/logs/ssl_request.log" "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
Avant d'aller plus loin...
Pour la suite des opération il convient (si ce n'est pas déjà fait) d'installer l'outil OpenSSL qui va nous permettre de générer des éléments de sécurité tel que des clef privée, des certificats et autres...Se rendre à la page http://www.openssl.org/related/binaries.html pour télécharger l'outil pour Windows.
Et se laisser guider pour son installation sur le poste de travail.
Toujours sur Windows, si vous avez CygWin, il est possible d'avoir OpenSSL depuis cet environnement.
C'est cette dernière version que nous utiliserons dans la suite du document.
Création des éléments de sécurité SSL
Etape 1 : Création d'une clef privée pour le certificat serveur dans un fichier key
$ openssl genrsa -des -out mydomaincom.key 2048 Generating RSA private key, 2048 bit long modulus ......+++ ................+++ e is 65537 (0x10001) Enter pass phrase for mydomaincom.key: Verifying - Enter pass phrase for mydomaincom.key:
Etape 2 : Exportation de la clef privée du serveur dans un fichier key sans passphrase
$ openssl rsa -in mydomaincom.key -out mydomaincom.nopassphrase.key Enter pass phrase for mydomaincom.key: writing RSA key
Etape 3 : Création d'un certificat auto-signé pour le serveur
$ openssl req -new -x509 -days 365 -key mydomaincom.key -out mydomaincom-autosigne.pem Enter pass phrase for mydomaincom.key: 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]:Gironde Locality Name (eg, city) []:Bordeaux Organization Name (eg, company) [Internet Widgits Pty Ltd]:MY COMPANY Organizational Unit Name (eg, section) []:MY UNIT Common Name (eg, YOUR name) []:www.mydomain.com Email Address []:myemail@mydomain.com
Etape 4 : Création d'une demande de certification pour le certificat serveur par une AC
$ openssl req -new -key mydomaincom.key -out mydomaincom.csr Enter pass phrase for mydomaincom.key: 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]:Gironde Locality Name (eg, city) []:Bordeaux Organization Name (eg, company) [Internet Widgits Pty Ltd]:MY COMPANY Organizational Unit Name (eg, section) []:MY UNIT Common Name (eg, YOUR name) []:www.mydomain.com Email Address []:myemail@mydomain.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
Etape 5 : Création d'une clef privée pour le certificat client dans un fichier key
$ openssl genrsa -des -out myclient.key 2048Generating RSA private key, 2048 bit long modulus .........................................................................................................+++ ......................................................+++ e is 65537 (0x10001) Enter pass phrase for myclient.key: Verifying - Enter pass phrase for myclient.key:
Etape 6 : Création d'un certificat auto-signé pour le client
$ openssl req -new -x509 -days 365 -key myclient.key -out myclient-autosigne.pem Enter pass phrase for myclient.key: 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]:Gironde Locality Name (eg, city) []:Bordeaux Organization Name (eg, company) [Internet Widgits Pty Ltd]:SQLI Organizational Unit Name (eg, section) []:SQLI Common Name (eg, YOUR name) []:Vincent FINET Email Address []:vfinet@sqli.com $ openssl x509 -in myclient-autosigne.pem -out myclient-autosigne.crt
Etape 7 : Création d'une demande de certification pour le certificat client par une AC
$ openssl req -new -key myclient.key -out myclient.csr Enter pass phrase for myclient.key: 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]:Gironde Locality Name (eg, city) []:Bordeaux Organization Name (eg, company) [Internet Widgits Pty Ltd]:SQLI Organizational Unit Name (eg, section) []:SQLI Common Name (eg, YOUR name) []:Vincent FINET Email Address []:vfinet@sqli.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
Etape 8 : Création d'une clef privée pour l'AC #1
$ openssl genrsa -des -out AC1.key 2048 Generating RSA private key, 2048 bit long modulus ....................+++ ............................................................................+++ e is 65537 (0x10001) Enter pass phrase for AC1.key: Verifying - Enter pass phrase for AC1.key:
Etape 9 : Création du certificat (auto-signé) de l'AC #1
$ openssl req -new -x509 -days 365 -key AC1.key -out AC1.pem Enter pass phrase for AC1.key: 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]:Gironde Locality Name (eg, city) []:Bordeaux Organization Name (eg, company) [Internet Widgits Pty Ltd]:AUTORITE CERT 1 Organizational Unit Name (eg, section) []:AUTORITE CERT 1 Common Name (eg, YOUR name) []:AUTORITE CERT 1 Email Address []:authoritycertificate@cert.com $ openssl x509 -in AC1.pem -out AC1.crt
Etape 10 : Création d'une clef privée pour l'AC #2
$ openssl genrsa -des -out AC2.key 2048 Generating RSA private key, 2048 bit long modulus ....................+++ ............................................................................+++ e is 65537 (0x10001) Enter pass phrase for AC1.key: Verifying - Enter pass phrase for AC1.key:
Etape 11 : Création du certificat (auto-signé) de l'AC #2
$ openssl req -new -x509 -days 365 -key AC2.key -out AC2.pem Enter pass phrase for AC2.key: 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]:Gironde Locality Name (eg, city) []:Bordeaux Organization Name (eg, company) [Internet Widgits Pty Ltd]:AUTORITE CERT 2 Organizational Unit Name (eg, section) []:AUTORITE CERT 2 Common Name (eg, YOUR name) []:AUTORITE CERT 2 Email Address []:authoritycertificate@cert.com $ openssl x509 -in AC2.pem -out AC2.crt
Etape 12 : Création du certificat serveur signé par l'AC #1
$ openssl x509 -req -in mydomaincom.csr -out mydomaincom-signeAC1.pem -CA AC1.pem -CAkey AC1.key -CAcreateserial -days 365 Signature ok subject=/C=FR/ST=Gironde/L=Bordeaux/O=MY COMPANY/OU=MY UNIT/CN=MY NAME/emailAddress=myemail@mycompany.fr Getting CA Private Key Enter pass phrase for AC1.key: $ openssl x509 -in mydomaincom-signeAC1.pem -out mydomaincom-signeAC1.crt
Etape 13 : Création du certificat client signé par l'AC #1
$ openssl x509 -req -in myclient.csr -out myclient-signeAC1.pem -CA AC1.pem -CAkey AC1.key -CAcreateserial -days 365 Signature ok subject=/C=FR/ST=Gironde/L=Bordeaux/O=SQLI/OU=SQLI/CN=Vincent FINET/emailAddress=vfinet@sqli.com Getting CA Private Key Enter pass phrase for AC1.key: $ openssl x509 -in myclient-signeAC1.pem -out myclient-signeAC1.crt
Etape 14 : Création du certificat client signé par l'AC #2
$ openssl x509 -req -in myclient.csr -out myclient-signeAC2.pem -CA AC2.pem -CAkey AC2.key -CAcreateserial -days 365 Signature ok subject=/C=FR/ST=Gironde/L=Bordeaux/O=SQLI/OU=SQLI/CN=Vincent FINET/emailAddress=vfinet@sqli.com Getting CA Private Key Enter pass phrase for AC2.key: $ openssl x509 -in myclient-signeAC2.pem -out myclient-signeAC2.crt
Etape 15 : Création du trousseau PKCS#12 pour le client (auto-signe)
$ openssl pkcs12 -export -in myclient-autosigne.pem -inkey myclient.key -name "Certificat Vincent FINET auto-signe" -certfile myclient-autosigne.crt -out myclient-autosigne.p12Enter pass phrase for myclient.key: Enter Export Password: Verifying - Enter Export Password:
Etape 16 : Création du trousseau PKCS#12 pour le client (avec signature de l'AC #1)
$ openssl pkcs12 -export -in myclient-signeAC1.pem -inkey myclient.key -name "Certificat Vincent FINET signe par l'AC 1" -certfile myclient-signeAC1.crt -out myclient-signeAC1.p12Enter pass phrase for myclient.key: Enter Export Password: Verifying - Enter Export Password:
Etape 17 : Création du trousseau PKCS#12 pour le client (avec signature de l'AC #2)
$ openssl pkcs12 -export -in myclient-signeAC2.pem -inkey myclient.key -name "Certificat Vincent FINET signe par l'AC 2" -certfile myclient-signeAC2.crt -out myclient-signeAC2.p12Enter pass phrase for myclient.key: Enter Export Password: Verifying - Enter Export Password:
Premier paramétrage SSL : certificat serveur auto-signé
Dans cette section nous allons paramétrer Apache avec SSL pour que notre serveur HTTP expose un port d'écoute en SSL avec un certificat serveur auto-signé.Modification du fichier de configuration SSL
Dans le fichier de configuration SSL d'Apache (version 2.0 et 2.2), il maintenant faut indiquer les certificats serveurs à utiliser.SSLCertificateFile "C:/mydomaincom/security/mydomaincom-autosigne.crt" SSLCertificateKeyFile "C:/mydomaincom/security/mydomaincom.nopassphrase.key" #SSLCACertificateFile.... #SSLVerifyClient.... #SSLVerifyDepth....
Test
Après redémarrage d'Apache, le serveur HTTP présente bien le certificat auto-signé.Une alerte va apparaître car le certificat est signé avec une AC non connue (c'est-à-dire lui même puisqu'il est auto-signé !).
Deuxième paramétrage SSL : certificat serveur signé par une autorité de certification
Dans cette section nous allons paramétrer Apache avec SSL pour que notre serveur HTTP expose un port d'écoute en SSL avec un certificat serveur signé par une autorité de certification.L'autorité de certification est dans notre exemple une autorité "maison" que nous avons créé précédemment. Mais il s'agit de la même chose lorsque l'on manipule un certificat serveur signé par une autorité officielle (type Verisign)
Modification du fichier de configuration SSL
Dans le fichier de configuration SSL d'Apache (version 2.0 et 2.2), il maintenant faut indiquer les certificats serveurs à utiliser.SSLCertificateFile "C:/mydomaincom/security/mydomaincom-signeAC1.crt SSLCertificateKeyFile "C:/mydomaincom/security/mydomaincom.nopassphrase.key" #SSLCACertificateFile.... #SSLVerifyClient.... #SSLVerifyDepth....
Test
Après redémarrage d'Apache, le serveur HTTP présente bien le certificat signé par une AC (la numéro 1).Dans notre exemple, il s'agit d'une AC auto-signée. Vous aurez donc une alerte comme vu dans la section précédente. En effet, l'AC n'est pas connue de votre navigateur. Si on l'ajoute alors il n'y a plus d'alerte sécurité.
Si l'AC utilisée était officielle (type Verisign), alors vous n'auriez eu aucune alerte de sécurité !
Troisième paramétrage SSL : authentification mutuelle
Dans cette section nous allons paramétrer Apache avec SSL pour que notre serveur HTTP expose un port d'écoute en SSL avec activation de l'authentification mutuelle. Le serveur et le client doivent présenter des certificats signés par des ACs connues de part et d'autre. Les ACs utilisées peuvent être différentes.Création du fichier contenant les certificats des ACs reconnues pour les clients
Ce fichier contient la concaténation des fichiers crt des ACs utilisables par les clients :- Si on veut authentifier des certificats client auto-signés il faut ajouter le fichier crt auto-signé directement.
$ cat "C:/mydomaincom/security/myclient-autosigne.crt" > "C:/mydomaincom/security/myclient-all-ACs.crt"
- Si on veut authentifier des certificats client signés par l'AC #1 on ajoute uniquement le crt correspondant (idem pour l'AC#2).
$ cat "C:/mydomaincom/security/AC1.crt" > "C:/mydomaincom/security/myclient-all-ACs.crt"
- Si on veut authentifier des certificats client signés par l'AC#1 et l'AC#2 on ajoute les deux crt correspondants
$ cat "C:/mydomaincom/security/AC[1-2].crt" > "C:/mydomaincom/security/myclient-all-ACs.crt"
Modification du fichier de configuration SSL
Dans le fichier de configuration SSL d'Apache (version 2.0 et 2.2), il maintenant faut indiquer les certificats serveurs à utiliser.SSLCertificateFile "C:/mydomaincom/security/mydomaincom-signeAC1.crt SSLCertificateKeyFile "C:/mydomaincom/security/mydomaincom.nopassphrase.key" SSLCACertificateFile "C:/mydomaincom/security/myclient-all-ACs.crt" SSLVerifyClient require SSLVerifyDepth 10A la place de SSLCACertificateFile on peut utiliser la directive SSLCACertificatePath. On y indique un repertoire contenant des "hash symlinks" pointant vers les fichiers crt souhaités.
TODO : comment créer ces fichier symlinks ?
On peut ajouter des contrôles supplémentaires :
- l'algorithme de chiffrement ne doit pas etre EXP ou NULL
- dans le DN du certificat, l'organisation (O) doit etre exactement "CLIENT",
- dans le DN du certificat, l'unité d'organisation (OU) peut être soit "DEV" soit "PROD" soit "COUNT",
- les demandes ne sont permises que du lundi (WDAY=1) au vendredi (WDAY=5),
- les demandes ne sont permises que de 8h00 à 20h00.
<Location />
SSLRequire %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
and %{SSL_CLIENT_S_DN_O} eq "CLIENT" \
and %{SSL_CLIENT_S_DN_OU} in {"DEV", "PROD", "COUNT"} \
and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \
and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20
</Location>
Installation sur poste client
Sur le poste client installer les fichiers p12 créé plus haut.Sous IE, on double clic sur le fichier.
Sous FF, il faut aller dans les options et importer le fichier p12.
Test
Après redémarrage d'Apache, le serveur HTTP présente bien le bon certificat et vous demande de spécifier un certificat présent dans votre magasin IE ou FF.Remarquez que la liste de certificats proposée par votre navigateur correspond à la liste des certificats signés par les AC contenu dans le fichier myclient-all-ACs.crt (renvoyé par le serveur au client).
Ce test marche à la fois avec un certificat serveur auto-signé, un certificat serveur signé par l'AC1 ou l'AC2, un certificat client auto-signé, un certificat client signé par l'AC1 ou l'AC2.
Aucun commentaire:
Enregistrer un commentaire