Chapitre 12. Serveurs web
12.1. Serveur Apache HTTP
httpd
, un serveur web open source développé par la Fondation Apache Software.
httpd
. Cette section traite de certaines nouvelles fonctionnalités ajoutées, souligne les changements importants entre les versions 2.2 et 2.4 du serveur Apache HTTP, et vous guide à travers la mise à jour des anciens fichiers de configuration.
12.1.1. Changements notables
- Contrôle du service httpd
- Avec la migration vers l'extérieur des scripts init SysV, les administrateurs de serveur devront se mettre à utiliser les commandes
apachectl
etsystemctl
pour contrôler le service, à la place de la commandeservice
. Les exemples suivants sont spécifiques au servicehttpd
.La commande :service httpd graceful
est remplacée parapachectl graceful
. Le fichier unitésystemd
dehttpd
a un comportement différent du script init, comme suit :La commande :- Un redémarrage correct est utilisé par défaut lorsque le service est rechargé.
- Un arrêt correct est utilisé par défaut lorsque le service est arrêté.
service httpd configtest
est remplacée parapachectl configtest
- Répertoire /tmp privé
- Pour améliorer la sécurité du système, le fichier unité
systemd
exécute le démonhttpd
en utilisant un répertoire privé/tmp
, séparé du répertoire/tmp
du système. - Structure de la configuration
- Les fichiers de configuration qui chargent les modules sont désormais placés dans le répertoire
/etc/httpd/conf.modules.d/
. Les paquets fournissant des modules supplémentaires qui peuvent être chargés pourhttpd
, comme php, placeront un fichier dans ce répertoire. Une directiveInclude
avant la section principale du fichier/etc/httpd/conf/httpd.conf
est utilisée pour inclure les fichiers dans le répertoire/etc/httpd/conf.modules.d/
. Cela signifie que tous les fichiers de configuration deconf.modules.d/
sont traités avant le corps principal dehttpd.conf
. Une directiveIncludeOptional
pour les fichiers dans le répertoire/etc/httpd/conf.d/
est placée à la fin du fichierhttpd.conf
. Cela signifie que les fichiers qui se trouvent dans/etc/httpd/conf.d/
sont désormais traités après le corps principal dehttpd.conf
.Certains fichiers de configuration supplémentaires sont fournis par le paquet httpd :/etc/httpd/conf.d/autoindex.conf
— Permet de configurer l'indexation du répertoire mod_autoindex./etc/httpd/conf.d/userdir.conf
— Permet de configurer l'accès aux répertoires utilisateurs. Par exemple,http://example.com/~username/
; ce type d'accès est désactivé par défaut pour des raisons de sécurité./etc/httpd/conf.d/welcome.conf
— Tout comme dans les versions précédentes, cela permet de configurer la page d'accueil affichée pourhttp://localhost/
lorsqu'aucun contenu n'est présent.
- Configuration par défaut
- Un fichier
httpd.conf
minimal est désormais fourni par défaut. De nombreux paramètres de configuration courants, commeTimeout
ouKeepAlive
, ne sont plus explicitement configurés dans la configuration par défaut ; au lieu de ceux-ci, les paramètres codés de manière irréversibles seront utilisés par défaut. Les paramètres codés de manière irréversible par défaut pour toutes les directives de configuration sont spécifiés dans le manuel. Veuillez consulter la section intitulée « Documentation installable » pour obtenir davantage d'informations. - Modifications incompatibles de la syntaxe
- Lors de la migration d'une configuration existante de httpd 2.2 à httpd 2.4, un certain nombre de modifications incompatibles en arrière apportées à la syntaxe de la configuration
httpd
nécessiteront des changements. Veuillez consulter le document Apache suivant pour obtenir davantage d'informations concernant la mise à niveau de http://httpd.apache.org/docs/2.4/upgrading.html - Modèle de traitement
- Dans les versions précédentes de Red Hat Enterprise Linux, différents modèles de multiples traitements (« multi-processing models », ou MPM) étaient disponibles aux différents binaires
httpd
: le modèle fourchu, « prefork »,/usr/sbin/httpd
; et le modèle basé sur thread « worker »,/usr/sbin/httpd.worker
.Sur Red Hat Enterprise Linux 7, seul un binairehttpd
est utilisé, et trois MPM sont disponibles en tant que modules chargeables : « worker », « prefork » (par défaut), et « event ». Veuillez modifier le fichier de configuration/etc/httpd/conf.modules.d/00-mpm.conf
comme requis, en ajoutant et supprimant le caractère dièse (#
), afin qu'un seul des trois modules MPM soit chargé. - Modifications de paquets
- Les modules d'authentification et d'autorisation LDAP sont désormais fournis dans un sous-paquet séparé, mod_ldap. Le nouveau module mod_session et les modules d'aide associés sont fournis dans un nouveau sous-paquet, mod_session. Les nouveaux modules mod_proxy_html et mod_xml2enc sont fournis dans un nouveau sous-paquet, mod_proxy_html. Ces paquets se trouvent tous dans le canal « Optional ».
Note
Avant de vous abonner aux canaux « Optional » et « Supplementary », veuillez consulter les Détails de l'étendue de la couverture. Si vous décidez d'installer des paquets à partir de ces canaux, veuillez suivre les étapes documentées dans l'article nommé Comment accéder aux canaux « Optional » et « Supplementary » et aux paquets -devel en utilisant Red Hat Subscription Manager (RHSM) ? sur le Portail Client Red Hat. - Empaquetage des structures de systèmes de fichiers
- Le répertoire
/var/cache/mod_proxy/
n'est plus fourni ; à la place, le répertoire/var/cache/httpd/
est empaqueté avec un sous-répertoireproxy
etssl
.Le contenu empaqueté avechttpd
a été déplacé de/var/www/
à/usr/share/httpd/
:/usr/share/httpd/icons/
— Le répertoire contenant un ensemble d'icônes avec des indices de répertoire, auparavant contenus dans/var/www/icons/
, a été déplacé sur/usr/share/httpd/icons/
. Disponible surhttp://localhost/icons/
dans la configuration par défaut ; l'emplacement et la disponibilité des icônes est configurable dans le fichier/etc/httpd/conf.d/autoindex.conf
./usr/share/httpd/manual/
—/var/www/manual/
a été déplacé sur/usr/share/httpd/manual/
. Ce répertoire, qui fait partie du paquet httpd-manual, contient la version HTML du manuel dehttpd
. Disponible surhttp://localhost/manual/
si le paquet est installé, l'emplacement et la disponibilité du manuel sont configurables dans le fichier/etc/httpd/conf.d/manual.conf
./usr/share/httpd/error/
—/var/www/error/
a été déplacé sur/usr/share/httpd/error/
. Pages d'erreurs HTTP de langues multiples personnalisées. Non configuré par défaut, le fichier de configuration exemple est fourni sur/usr/share/doc/httpd-VERSION/httpd-multilang-errordoc.conf
.
- Authentifications, autorisations et contrôle des accès
- Les directives de configuration utilisées pour contrôler l'authentification, les autorisations et le contrôle des accès ont changé de manière significative. Les fichiers de configuration existants qui utilisent les directives
Order
,Deny
etAllow
doivent être adaptés afin de pouvoir utiliser la nouvelle syntaxeRequire
. Veuillez consulter le document Apache suivant pour obtenir davantage d'informations : http://httpd.apache.org/docs/2.4/howto/auth.html - suexec
- Pour améliorer la sécurité du système, le binaire suexec n'est plus installé par l'équivalent de l'utilisateur
root
; au lieu de cela, il possède une fonctionnalité «bit Set» dans le système de fichiers, qui limite les restrictions. En conjonction avec ce changement, le binaire suexec n'utilise plus le fichier journal/var/log/httpd/suexec.log
. Au lieu de cela, des messages de journalisation sont envoyés sur syslog. Par défaut, ceux-ci apparaîtront dans le fichier journal/var/log/secure
. - Interface du module
- Des modules binaires de tierce-partie créés avec httpd 2.2 ne sont pas compatibles avec httpd 2.4 à cause de changements apportés à l'interface du module
httpd
. De tels modules devront être ajustés comme nécessaire pour l'interface du module httpd 2.4, puis recréés. Une liste détaillée des changements d'API dans la version2.4
sont disponibles ici : http://httpd.apache.org/docs/2.4/developer/new_api_2_4.html.Le binaire apxs utilisé pour créer des modules source a été déplacé de/usr/sbin/apxs
à/usr/bin/apxs
. - Modules supprimés
- Liste des modules
httpd
supprimés de Red Hat Enterprise Linux 7 :- mod_auth_mysql, mod_auth_pgsql
- httpd 2.4 fournit la prise en charge de l'authentification de bases de données SQL de manière interne dans le module mod_authn_dbd.
- mod_perl
- mod_perl n'est pas officiellement pris en charge avec httpd 2.4 en amont.
- mod_authz_ldap
- httpd 2.4 offre la prise en charge LDAP dans le sous-paquet mod_ldap en utilisant mod_authnz_ldap.
12.1.2. Mettre à jour la configuration
- Comme ils peuvent avoir été modifiés, assurez-vous que tous les noms de modules soient corrects. Ajustez la directive
LoadModule
pour chaque module dont le nom a changé. - Compilez à nouveau tous les modules de tierce-partie avant de tenter de les charger. Typiquement, cela signifie des modules d'authentification et d'autorisation.
- Si vous utilisez Apache HTTP Secure Server, veuillez consulter la Section 12.1.8, « Activer le module mod_ssl » pour obtenir des informations importantes sur l'activation du protocole SSL (« Secure Sockets Layer »).
~]# apachectl configtest
Syntax OK
12.1.3. Exécuter le service httpd
httpd
, assurez-vous que httpd soit effectivement installé. Cela peut être effectué en utilisant la commande suivante :
~]# yum install httpd
12.1.3.1. Lancer le service
httpd
, veuillez saisir ce qui suit à l'invite de shell en tant qu'utilisateur root
:
~]# systemctl start httpd.service
~]# systemctl enable httpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
Note
12.1.3.2. Arrêter le service
httpd
, veuillez saisir ce qui suit dans une invite de shell en tant qu'utilisateur root
:
~]# systemctl stop httpd.service
~]# systemctl disable httpd.service
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.
12.1.3.3. Redémarrer le service
httpd
:
- Pour redémarrer le système entièrement, exécutez la commande suivante en tant qu'utilisateur
root
:~]#
systemctl restart httpd.service
Ceci arrête le service en cours d'exécutionhttpd
et le lance immédiatement après. Veuillez utiliser cette commande après avoir installé ou supprimé un module chargé dynamiquement, comme le module PHP. - Pour uniquement recharger la configuration, veuillez saisir en tant qu'utilisateur
root
:~]#
systemctl reload httpd.service
Ceci cause au service en cours d'exécutionhttpd
de recharger son fichier de configuration. Toute requête actuellement en cours de traitement sera interrompue, ce qui pourrait causer à un navigateur client d'afficher un message d'erreur ou d'effectuer un rendu partiel de page. - Pour recharger sa configuration sans affecter de requête active, veuillez saisir la commande suivante en tant qu'utilisateur
root
:~]#
apachectl graceful
Ceci cause au service en cours d'exécutionhttpd
de recharger son fichier de configuration. Toute requête actuellement en cours de traitement continuera d'utiliser l'ancienne configuration.
12.1.4. Modifier les fichiers de configuration
httpd
est lancé, par défaut, il lit la configuration à partir d'emplacements répertoriés dans la Tableau 12.1, « Fichiers de configuration du service httpd ».
httpd
.
~]# apachectl configtest
Syntax OK
12.1.5. Utiliser des modules
httpd
est distribué avec un certain nombre d'objets partagés dynamiques (« Dynamic Shared Objects », ou DSO), qui peuvent être chargés ou déchargés dynamiquement pendant le runtime, selon les besoins. Dans Red Hat Enterprise Linux 7, ces modules se trouvent dans /usr/lib64/httpd/modules/
.
12.1.5.1. Charger un module
LoadModule
. Remarquez que les modules fournis par un paquet séparé possèdent souvent leur propre fichier de configuration dans le répertoire /etc/httpd/conf.d/
.
Exemple 12.1. Charger mod_ssl DSO
LoadModule ssl_module modules/mod_ssl.so
httpd
.
12.1.5.2. Écrire un module
root
:
~]# yum install httpd-devel
apxs
) requis pour compiler un module.
~]# apxs -i -a -c module_name.c
12.1.6. Paramétrer des hôtes virtuels
/usr/share/doc/httpd-VERSION/httpd-vhosts.conf
dans le répertoire /etc/httpd/conf.d/
, et remplacez les valeurs d'espaces réservés @@Port@@
et @@ServerRoot@@
. Personnalisez les options selon vos besoins, comme affiché dans l'Exemple 12.2, « Exemple de configuration d'hôte virtuel ».
Exemple 12.2. Exemple de configuration d'hôte virtuel
<VirtualHost *:80> ServerAdmin webmaster@penguin.example.com DocumentRoot "/www/docs/penguin.example.com" ServerName penguin.example.com ServerAlias www.penguin.example.com ErrorLog "/var/log/httpd/dummy-host.example.com-error_log" CustomLog "/var/log/httpd/dummy-host.example.com-access_log" common </VirtualHost>
ServerName
doit être un nom DNS valide assigné à la machine. Le conteneur <VirtualHost>
est hautement personnalisable, et accepte la plupart des directives disponibles dans la configuration du serveur principal. Les directives qui ne sont pas prises en charge dans ce conteneur incluent User
et Group
, remplacées par SuexecUserGroup
.
Note
Listen
dans la section des paramètres globaux du fichier /etc/httpd/conf/httpd.conf
en conséquence.
httpd
.
12.1.7. Paramétrer un serveur SSL
mod_ssl
, un module qui utilise le kit de ressources OpenSSL pour fournir la prise en charge SSL/TLS, est couramment appelé un serveur SSL. Red Hat Enterprise Linux prend également en charge l'utilisation de Mozilla NSS comme implémentation TLS. La prise en charge de Mozilla NSS est fournie par le module mod_nss
.
12.1.7.1. Vue d'ensemble des certificats et de la sécurité
Navigateur Web | Lien |
---|---|
Mozilla Firefox | Liste d'AC root Mozilla. |
Opera | Informations sur les certificats root utilisés par Opera. |
Internet Explorer | Informations sur les certificats root utilisés par Microsoft Windows. |
Chromium | Informations sur les certificats root utilisés par le projet Chromium. |
12.1.8. Activer le module mod_ssl
mod_ssl
, il n'est pas possible qu'une autre application ou qu'un autre module, comme mod_nss
, soit configuré pour utiliser le même port. Le port 443
est le port par défaut pour HTTPS.
mod_ssl
et le kit de ressources OpenSSL toolkit, veuillez installer les paquets mod_ssl et openssl. Saisissez la commande suivante en tant qu'utilisateur root
:
~]# yum install mod_ssl openssl
mod_ssl
sur /etc/httpd/conf.d/ssl.conf
, qui est inclus dans le fichier de configuration principal du serveur Apache HTTP Server par défaut. Pour que le module soit chargé, veuillez redémarrer le service httpd
comme décrit dans la Section 12.1.3.3, « Redémarrer le service ».
Important
SSL
et d'utiliser TLSv1.1
ou TLSv1.2
uniquement. Une rétrocompatibilité peut être effectuée en utilisant TLSv1.0
. De nombreux produits pris en charge par Red Hat ont la capacité d'utiliser le protocole SSLv2
ou SSLv3
, ou de les activer par défaut. Cependant, l'utilisation de SSLv2
ou de SSLv3
est désormais fortement déconseillée.
12.1.8.1. Activer et désactiver SSL et TLS sur mod_ssl
SSLProtocol
dans la section « ## SSL Global Context » du fichier de configuration et en la supprimant partout ailleurs, ou modifiez l'entrée par défaut sous « # SSL Protocol support » dans toutes les sections « VirtualHost ». Si vous ne le spécifiez pas dans la section VirtualHost par domaine, les paramètres hérités proviendront de la section globale. Pour vous assurer qu'une version du protocole est en cours de désactivation, l'administrateur doit uniquement spécifier SSLProtocol
dans la section « SSL Global Context », ou bien, le spécifier dans toutes les sections VirtualHost par domaine.
Procédure 12.1. Désactiver SSLv2 et SSLv3
- En tant qu'utilisateur
root
, ouvrez le fichier/etc/httpd/conf.d/ssl.conf
et recherchez toutes les instances de la directiveSSLProtocol
. Par défaut, le fichier de configuration contient une section qui ressemble à cela :~]#
Cette section se trouve dans la section VirtualHost.vi /etc/httpd/conf.d/ssl.conf
# SSL Protocol support: # List the enable protocol levels with which clients will be able to # connect. Disable SSLv2 access by default: SSLProtocol all -SSLv2 - Modifiez la ligne
SSLProtocol
comme suit :# SSL Protocol support: # List the enable protocol levels with which clients will be able to # connect. Disable SSLv2 access by default: SSLProtocol all -SSLv2 -SSLv3
Répétez cette action pour toutes les sections VirtualHost. Enregistrez et fermez le fichier. - Vérifiez que toutes les occurrences de la directive
SSLProtocol
ont été modifiées comme suit :~]#
Cette étape est particulièrement importante si vous avez plus d'une section VirtualHost par défaut.grep SSLProtocol /etc/httpd/conf.d/ssl.conf
SSLProtocol all -SSLv2 -SSLv3 - Redémarrez le démon Apache comme suit :
~]#
Remarquez que toutes les sessions seront interrompues.systemctl restart httpd
Procédure 12.2. Désactiver tous les protocoles SSL et TLS sauf TLS 1 et ses versions supérieures
- En tant qu'utilisateur
root
, ouvrez le fichier/etc/httpd/conf.d/ssl.conf
et recherchez toutes les instances de la directiveSSLProtocol
. Par défaut, le fichier contient une section qui ressemble à cela :~]#
vi /etc/httpd/conf.d/ssl.conf
# SSL Protocol support: # List the enable protocol levels with which clients will be able to # connect. Disable SSLv2 access by default: SSLProtocol all -SSLv2 - Modifiez la ligne
SSLProtocol
comme suit :# SSL Protocol support: # List the enable protocol levels with which clients will be able to # connect. Disable SSLv2 access by default: SSLProtocol -all +TLSv1 +TLSv1.1 +TLSv1.2
Enregistrer et fermer le fichier. - Vérifiez le changement comme suit :
~]#
grep SSLProtocol /etc/httpd/conf.d/ssl.conf
SSLProtocol -all +TLSv1 +TLSv1.1 +TLSv1.2 - Redémarrez le démon Apache comme suit :
~]#
Remarquez que toutes les sessions seront interrompues.systemctl restart httpd
Procédure 12.3. Tester le statut des protocoles SSL et TLS
openssl s_client -connect
. La commande se trouve sous le format suivant : openssl s_client -connect hostname:port -protocol, où port correspond au port pour effectuer le test et protocol est la version du protocole à tester. Pour tester le serveur SSL exécuté localement, veuillez utiliser
localhost
comme nom d'hôte. Par exemple, pour tester le port par défaut pour des connexion HTTPS sécurisées, pour voir si SSLv3 est activé sur le port 443
, exécutez la commande suivante :
~]#
La sortie ci-dessus indique que la tentative de connexion a échoué et qu'aucun chiffrement n'a été négocié.openssl s_client -connect localhost:443 -ssl3
CONNECTED(00000003) 139809943877536:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:s3_pkt.c:1257:SSL alert number 40 139809943877536:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:s3_pkt.c:596:sortie omise New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE SSL-Session: Protocol : SSLv3 sortie tronquée~]$
La sortie ci-dessus indique qu'aucun échec de tentative de connexion n'a eu lieu et qu'un ensemble de chiffrements a été négocié.openssl s_client -connect localhost:443 -tls1_2
CONNECTED(00000003) depth=0 C = --, ST = SomeState, L = SomeCity, O = SomeOrganization, OU = SomeOrganizationalUnit, CN = localhost.localdomain, emailAddress = root@localhost.localdomainsortie omise New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384 Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1.2sortie tronquée
openssl s_client
sont documentées dans la page man de s_client(1)
.
12.1.9. Activer le module mod_nss
mod_nss
, vous ne pourrez pas avoir le paquet mod_ssl installé avec ses paramètres par défaut car mod_ssl
utilisera le port 443
par défaut, cependant ceci est le port HTTPS par défaut. Si possible, veuillez supprimer le paquet.
root
:
~]# yum remove mod_ssl
Note
mod_ssl
est requis à d'autres fins, veuillez modifier le fichier /etc/httpd/conf.d/ssl.conf
afin qu'il utilise un autre port que le port 443
pour empêcher que mod_ssl
entre en conflit avec mod_nss
lorsque son port d'écoute est changé sur le port 443
.
mod_nss
et mod_ssl
peuvent uniquement coexister au même moment s'ils utilisent des ports uniques. Pour cette raison, mod_nss
utilise par défaut le port 8443
, mais le port HTTPS par défaut est le port 443
. Le port est spécifié par la directive Listen
ainsi que dans le nom ou l'adresse VirtualHost.
Procédure 12.4. Configurer mod_nss
- Installez mod_nss en tant qu'utilisateur
root
:~]#
yum install mod_nss
Cela créera le fichier de configurationmod_nss
dans/etc/httpd/conf.d/nss.conf
. Le répertoire/etc/httpd/conf.d/
est inclus dans le fichier de configuration principal du serveur Apache HTTP Server par défaut. Pour que le module soit chargé, veuillez redémarrer le servicehttpd
comme décrit dans la Section 12.1.3.3, « Redémarrer le service ». - En tant qu'utilisateur
root
, ouvrez le fichier/etc/httpd/conf.d/nss.conf
et recherchez toutes les instances de la directiveListen
.Modifiez la ligneListen 8443
comme suit :Listen 443
Le port443
est le port par défaut pourHTTPS
. - Modifiez la ligne
VirtualHost _default_:8443
par défaut comme suit :VirtualHost _default_:443
Veuillez modifier toute autre section d'hôte virtuel qui n'est pas par défaut s'il en existe. Puis enregistrez et fermez le fichier. - Mozilla NSS stocke les certificats dans une base de données de certificats de serveur indiquée par la directive
NSSCertificateDatabase
dans le fichier/etc/httpd/conf.d/nss.conf
. Par défaut, le chemin est défini sur/etc/httpd/alias
, la base de données NSS créée pendant l'installation.Pour afficher la base de données NSS par défaut, veuillez exécuter la commande suivante :~]#
Dans la sortie de commande ci-dessus,certutil -L -d /etc/httpd/alias
Certificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI cacert CTu,Cu,Cu Server-Cert u,u,u alpha u,pu,uServer-Cert
est leNSSNickname
par défaut. L'option-L
répertorie tous les certificats, ou affiche des informations sur un certificat nommé, dans une base de données de certificats. L'option-d
spécifie le répertoire de la base de données contenant le certificat et les fichiers-clés de la base de données. Veuillez consulter la page mancertutil(1)
pour davantage d'options de ligne de commande. - Pour configurer mod_nss de manière à utiliser une autre base de données, veuillez modifier la ligne
NSSCertificateDatabase
dans le fichier/etc/httpd/conf.d/nss.conf
. Le fichier par défaut possède les lignes suivantes dans la section VirtualHost.# Server Certificate Database: # The NSS security database directory that holds the certificates and # keys. The database consists of 3 files: cert8.db, key3.db and secmod.db. # Provide the directory that these files exist. NSSCertificateDatabase /etc/httpd/alias
Dans la sortie la commande ci-dessus,alias
est le répertoire de la base de données NSS par défaut,/etc/httpd/alias/
. - Pour appliquer un mot de passe à la base de données des certificats NSS par défaut, veuillez utiliser la commande suivante en tant qu'utilisateur
root
:~]#
certutil -W -d /etc/httpd/alias
Enter Password or Pin for "NSS Certificate DB": Enter a password which will be used to encrypt your keys. The password should be at least 8 characters long, and should contain at least one non-alphabetic character. Enter new password: Re-enter password: Password changed successfully. - Avant de déployer le serveur HTTPS, veuillez créer une nouvelle base de données de certificats en utilisant un certificat signé par une autorité de certification (AC).
Exemple 12.3. Ajouter un certificat à la base de données Mozilla NSS
La commandecertutil
est utilisée pour ajouter un certificat AC aux fichiers de la base de données NSS :certutil
-d
/etc/httpd/nss-db-directory/
-A
-n
"CA_certificate"-t
CT,,
-a
-i
certificate.pem
La commande ci-dessus ajoute un certificat AC stocké dans un fichier au format PEM nommé certificate.pem. L'option-d
spécifie le répertoire de la base de données NSS contenant le certificat et les fichiers-clés de la base de données, l'option-n
définit un nom pour le certificat,-t
CT,
signifie que le certificat est approuvé pour être utilisé dans les serveurs et clients TLS. L'option-A
ajoute un certificat existant dans une base de données de certificats. Si la base de données n'existe pas, elle sera créée. L'option-a
permet l'utilisation du format ASCII pour les entrées ou les sorties et l'option-i
transmet le fichier d'entréecertificate.pem
à la commande.Veuillez consulter la page man decertutil(1)
pour obtenir davantage d'options de ligne de commande. - La base de données NSS doit être protégée par un mot de passe afin de garantir la sécurité de la clé privée.
Exemple 12.4. Définir un mot de passe pour la base de données Mozilla NSS
L'outilcertutil
peut être utilisé pour définir un mot de passe pour une base de données NSS comme suit :certutil -W -d /etc/httpd/nss-db-directory/
Par exemple, pour la base de données par défaut, veuillez exécuter une commande en tant qu'utilisateurroot
, comme suit :~]#
certutil -W -d /etc/httpd/alias
Enter Password or Pin for "NSS Certificate DB": Enter a password which will be used to encrypt your keys. The password should be at least 8 characters long, and should contain at least one non-alphabetic character. Enter new password: Re-enter password: Password changed successfully. - Configurez
mod_nss
de manière à utiliser le jeton logiciel NSS interne en modifiant la ligne avec la directiveNSSPassPhraseDialog
, comme suit :~]#
Ceci sert à éviter la saisie manuelle de mots de passe pendant le démarrage système. Le jeton logiciel existe dans la base de données NSS, mais vous pouvez également posséder une clé physique contenant les certificats.vi /etc/httpd/conf.d/nss.conf
NSSPassPhraseDialog file:/etc/httpd/password.conf - Si le certificat du serveur SSL situé dans la base de données NSS est un certificat RSA, assurez-vous que le paramètre
NSSNickname
ne soit pas mis en commentaire et qu'il corresponde bien au nom affiché dans l'étape 4 ci-dessus :~]#
vi /etc/httpd/conf.d/nss.conf
NSSNickname Server-CertSi le certificat du serveur SSL situé dans la base de données NSS est un certificat ECC, assurez-vous que le paramètreNSSECCNickname
ne soit pas mis en commentaire et qu'il corresponde bien au surnom affiché dans l'étape 4 ci-dessus :~]#
vi /etc/httpd/conf.d/nss.conf
NSSECCNickname Server-CertAssurez-vous que le paramètreNSSCertificateDatabase
ne soit pas mis en commentaire et qu'il pointe vers le répertoire de la base de données NSS affiché dans l'étape 4 ou configuré dans l'étape 5 ci-dessus :~]#
Remplacezvi /etc/httpd/conf.d/nss.conf
NSSCertificateDatabase /etc/httpd/alias/etc/httpd/alias
par le chemin vers la base de données de certificats à utiliser. - Créez le fichier
/etc/httpd/password.conf
en tant qu'utilisateurroot
:~]#
Ajoutez une ligne sous le format suivant :vi /etc/httpd/password.conf
internal:password
en remplaçant password par le mot de passe appliqué aux bases de données de sécurité NSS dans l'étape 6 ci-dessus. - Veuillez appliquer l'appartenance et les permissions appopriées au fichier
/etc/httpd/password.conf
:~]#
chgrp apache /etc/httpd/password.conf
~]#chmod 640 /etc/httpd/password.conf
~]#ls -l /etc/httpd/password.conf
-rw-r-----. 1 root apache 10 Dec 4 17:13 /etc/httpd/password.conf - Pour configurer
mod_nss
de manière à utiliser le jeton logiciel NSS dans/etc/httpd/password.conf
, veuillez modifier/etc/httpd/conf.d/nss.conf
comme suit :~]#
vi /etc/httpd/conf.d/nss.conf
- Redémarrez le serveur Apache pour que les changements entrent en vigueur, comme décrit dans la Section 12.1.3.3, « Redémarrer le service »
Important
SSL
et d'utiliser TLSv1.1
ou TLSv1.2
uniquement. Une rétrocompatibilité peut être effectuée en utilisant TLSv1.0
. De nombreux produits pris en charge par Red Hat ont la capacité d'utiliser le protocole SSLv2
ou SSLv3
, ou de les activer par défaut. Cependant, l'utilisation de SSLv2
ou de SSLv3
est désormais fortement déconseillée.
12.1.9.1. Activer et désactiver SSL et TLS sur mod_nss
NSSProtocol
dans la section « ## SSL Global Context » du fichier de configuration et en la supprimant partout ailleurs, ou modifiez l'entrée par défaut sous « # SSL Protocol » dans toutes les sections « VirtualHost ». Si vous ne le spécifiez pas dans la section VirtualHost par domaine, les paramètres hérités proviendront de la section globale. Pour vous assurer qu'une version du protocole est en cours de désactivation, l'administrateur doit uniquement spécifier NSSProtocol
dans la section « SSL Global Context », ou bien dans toutes les sections VirtualHost par domaine.
Procédure 12.5. Désactiver tous les protocoles SSL et TLS sauf TLS 1 et ses versions supérieures dans mod_nss
- En tant qu'utilisateur
root
, ouvrez le fichier/etc/httpd/conf.d/nss.conf
et recherchez toutes les instances de la directiveNSSProtocol
. Par défaut, le fichier de configuration contient une section qui ressemble à cela :~]#
Cette section se trouve dans la section VirtualHost.vi /etc/httpd/conf.d/nss.conf
# SSL Protocol:sortie omise # Since all protocol ranges are completely inclusive, and no protocol in the # middle of a range may be excluded, the entry "NSSProtocol SSLv3,TLSv1.1" # is identical to the entry "NSSProtocol SSLv3,TLSv1.0,TLSv1.1". NSSProtocol SSLv3,TLSv1.0,TLSv1.1 - Modifiez la ligne
NSSProtocol
comme suit :# SSL Protocol: NSSProtocol TLSv1.0,TLSv1.1
Répétez cette action pour toutes les sections VirtualHost. - Modifiez la ligne
Listen 8443
comme suit :Listen 443
- Modifiez la ligne
VirtualHost _default_:8443
par défaut comme suit :VirtualHost _default_:443
Veuillez modifier toute autre section d'hôte virtuel qui n'est pas par défaut s'il en existe. Puis enregistrez et fermez le fichier. - Vérifiez que toutes les occurrences de la directive
NSSProtocol
ont été modifiées comme suit :~]#
Cette étape est particulièrement importante si vous possédez plus d'une section VirtualHost.grep NSSProtocol /etc/httpd/conf.d/nss.conf
# middle of a range may be excluded, the entry "NSSProtocol SSLv3,TLSv1.1" # is identical to the entry "NSSProtocol SSLv3,TLSv1.0,TLSv1.1". NSSProtocol TLSv1.0,TLSv1.1 - Redémarrez le démon Apache comme suit :
~]#
Remarquez que toutes les sessions seront interrompues.service httpd restart
Procédure 12.6. Tester le statut des protocoles SSL et TLS dans mod_nss
openssl s_client -connect
. Installez le paquet openssl en tant qu'utilisateur root
:
~]# yum install openssl
openssl s_client -connect
se trouve sous le format suivant : openssl s_client -connect hostname:port -protocol, où port correspond au port pour effectuer le test et protocol est la version du protocole à tester. Pour tester le serveur SSL exécuté localement, veuillez utiliser
localhost
comme nom d'hôte. Par exemple, pour tester le port par défaut pour des connexions HTTPS sécurisées, pour voir si SSLv3 est activé sur le port 443
, exécutez la commande suivante :
~]#
La sortie ci-dessus indique que la tentative de connexion a échoué et qu'aucun chiffrement n'a été négocié.openssl s_client -connect localhost:443 -ssl3
CONNECTED(00000003) 3077773036:error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number:s3_pkt.c:337:sortie omise New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE SSL-Session: Protocol : SSLv3 sortie tronquée~]$
La sortie ci-dessus indique qu'aucun échec de tentative de connexion n'a eu lieu et qu'un ensemble de chiffrements a été négocié.openssl s_client -connect localhost:443 -tls1
CONNECTED(00000003) depth=1 C = US, O = example.com, CN = Certificate Shacksortie omise New, TLSv1/SSLv3, Cipher is AES128-SHA Server public key is 1024 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1sortie tronquée
openssl s_client
sont documentées dans la page man de s_client(1)
.
12.1.10. Utiliser une clé existante et un certificat
- Vous modifiez l'adresse IP ou le nom du domaine.Des certificats sont créés pour une paire adresse IP et nom de domaine particuliers. Si l'une de ces valeurs change, le certificat est invalide.
- Vous avez un certificat de VeriSign, et vous changez le logiciel du serveur.VeriSign, une autorité de certification largement utilisée, octroit des certificats pour un produit logiciel, une adresse IP, et un nom de domaine particulier. Modifier le produit logiciel rend le certificat invalide.
/etc/pki/tls/private/
et /etc/pki/tls/certs/
, respectivement. Vous pouvez faire cela exécutant les commandes suivantes en tant qu'utilisateur root
:
~]#mv
key_file.key
/etc/pki/tls/private/hostname.key
~]#mv
certificate.crt
/etc/pki/tls/certs/hostname.crt
/etc/httpd/conf.d/ssl.conf
:
SSLCertificateFile /etc/pki/tls/certs/hostname.crt SSLCertificateKeyFile /etc/pki/tls/private/hostname.key
httpd
comme décrit dans la Section 12.1.3.3, « Redémarrer le service ».
Exemple 12.5. Utiliser une clé et un certificat du serveur web sécurisé « Red Hat Secure Web Server »
~]#mv /etc/httpd/conf/httpsd.key /etc/pki/tls/private/penguin.example.com.key
~]#mv /etc/httpd/conf/httpsd.crt /etc/pki/tls/certs/penguin.example.com.crt
12.1.11. Générer une nouvelle clé et un nouveau certificat
root
:
~]# yum install crypto-utils
Important
root
, veuillez utiliser la commande suivante au lieu de genkey :
~]# openssl req -x509 -new -set_serial number -key hostname.key -out hostname.crt
Note
root
:
~]# rm /etc/pki/tls/private/hostname.key
genkey
en tant qu'utilisateur root
, suivie du nom d'hôte approprié (par exemple, penguin.example.com
) :
~]# genkey
hostname
- Examinez les emplacements cibles dans lesquels la clé et le certificat seront stockés.
Figure 12.1. Exécuter l'utilitaire genkey
Veuillez utiliser la touche Tab pour sélectionner le bouton, et appuyez sur Entrée pour passer à l'écran suivant. - En utilisant les touches de flèches haut et bas, sélectionnez une taille de clé convenable. Remarquez que malgré qu'une clé de plus grande taille améliore la sécurité, celle-ci augmentera également le temps de réponse de votre serveur. L'organisme NIST recommande d'utiliser
2048 bits
. Veuillez consulter le document NIST Special Publication 800-131A.Figure 12.2. Sélectionner la taille de la clé
Une fois terminé, veuillez utiliser la touche Tab pour sélectionner le bouton, et appuyez sur Entrée pour initier le processus de génération de bits aléatoire. Selon la taille de clé sélectionnée, ceci peut prendre longtemps. - Décidez si vous souhaitez envoyer une requête de certificat à une autorité de certification.
Figure 12.3. Générer une requête de certificat
Utilisez la touche Tab pour sélectionnerafin de composer une requête de certificat, ou pour générer un certificat auto-signé. Puis appuyez sur Entrée pour confirmer votre choix. - À l'aide de la barre d'espace, activez (
[*]
) ou désactivez ([ ]
) le chiffrement de la clé privée.Figure 12.4. Chiffrer la clé privée
Veuillez utiliser la touche Tab pour sélectionner le bouton, et appuyez sur Entrée pour passer à l'écran suivant. - Si vous avez activé le chiffrement de clé privée, veuillez saisir une phrase de passe convenable. Remarquez que pour des raisons de sécurité, celle-ci n'est pas affichée lorsque vous la saisissez, et doit faire 5 caractères au minimum.
Figure 12.5. Saisir une phrase de passe
Veuillez utiliser la touche Tab pour sélectionner le bouton, et appuyez sur Entrée pour passer à l'écran suivant.Important
Saisir la phrase de passe correctement est requis pour que le serveur démarre. Si vous la perdez, vous devrez générer une nouvelle clé et un nouveau certificat. - Personnaliser les détails du certificat.
Figure 12.6. Spécifier les informations du certificat
Veuillez utiliser la touche Tab pour sélectionner le bouton, et appuyez sur Entrée pour terminer avec la génération de clé. - Si vous avez activé la génération de requête de certificat, il vous sera demandé de l'envoyer à une autorité de certification.
Figure 12.7. Instructions sur la manière d'envoyer une requête de certificat
Appuyez sur Entrée pour retourner dans une invite shell.
/etc/httpd/conf.d/ssl.conf
:
SSLCertificateFile /etc/pki/tls/certs/hostname.crt SSLCertificateKeyFile /etc/pki/tls/private/hostname.key
httpd
comme décrit dans la Section 12.1.3.3, « Redémarrer le service » afin que la configuration mise à jour soit chargée.
12.1.12. Configurez le pare-feu pour HTTP et HTTPS en utilisant la ligne de commande
HTTP
et HTTPS
. Pour autoriser le système à agir en tant que serveur web, veuillez utiliser les services firewalld
pris en charge pour que le trafic HTTP
et que le trafic HTTPS
soient autorisés à passer à travers le pare-feu comme requis.
HTTP
en utilisant la ligne de commande, veuillez exécuter la commande suivante en tant qu'utilisateur root
:
~]# firewall-cmd --add-service http
success
HTTPS
en utilisant la ligne de commande, veuillez exécuter la commande suivante en tant qu'utilisateur root
:
~]# firewall-cmd --add-service https
success
--permanent
.
12.1.12.1. Vérifier l'accès réseau de HTTPS et de HTTPS entrant en utilisant la ligne de commande
root
:
~]# firewall-cmd --list-all
public (default, active)
interfaces: em1
sources:
services: dhcpv6-client sshsortie tronquée
Dans cet exemple extrait d'une installation par défaut, le pare-feu est activé mais HTTP
et HTTPS
n'ont pas été autorisés à passer à travers.
HTTP
et HTTP
activés, la ligne services
apparaîtra et sera similaire à ceci :
services: dhcpv6-client http https ssh
firewalld
, veuillez consulter le Guide de sécurité Red Hat Enterprise Linux 7 .
12.1.13. Ressources supplémentaires
Documentation installée
httpd(8)
— la page du manuel du servicehttpd
contenant la liste complète de ses options de ligne de commande.genkey(1)
— la page du manuel de l'utilitairegenkey
, fournie par le paquet crypto-utils.apachectl(8)
— la page du manuel de l'interface de contrôle du serveur HTTP Apache.
Documentation installable
- http://localhost/manual/ — documentation officielle du serveur HTTP Apache avec la description complète de ses directives et modules disponibles. Remarquez que pour accéder à cette documentation, le paquet httpd-manual doit être installé, et le serveur web doit être en cours d'exécution.Avant d'accéder à la documentation, veuillez exécuter la commande suivante en tant qu'utilisateur
root
:~]#
yum install httpd-manual
~]#apachectl graceful
Documentation en ligne
- http://httpd.apache.org/ — site web officiel du serveur HTTP Apache avec la documentation sur toutes les directives et tous les modules par défaut.
- http://www.openssl.org/ — page d'accueil d'OpenSSL contenant davantage de documentation, une foire aux questions, des liens de listes de diffusion, ainsi que d'autres ressources utiles.