Table des matières
Dernière mise-à-jour : 2020/01/30 03:27
- Faire en CentOS 7
- Debian 8
208.2 - Gestion du Serveur Web Apache 2.4 en HTTPS (3/60) - FIXME
LPI 208.2 - Apache configuration for HTTPS
Weight: 3
Description: Candidates should be able to configure a web server to provide HTTPS.
Key Knowledge Areas:
- SSL configuration files, tools and utilities
- Generate a server private key and CSR for a commercial CA
- Generate a self-signed Certificate
- Install the key and certificate, including intermediate CAs
- Configure Virtual Hosting using SNI
- Awareness of the issues with Virtual Hosting and use of SSL
- Security issues in SSL use, disable insecure protocols and ciphers
Terms and Utilities:
- Apache2 configuration files
- /etc/ssl/, /etc/pki/
- openssl, CA.pl
- SSLEngine, SSLCertificateKeyFile, SSLCertificateFile
- SSLCACertificateFile, SSLCACertificatePath
- SSLProtocol, SSLCipherSuite, ServerTokens, ServerSignature, TraceEnable
Présentation de SSL
SSL ( Secure Sockets Layers ) est utilisé pour sécuriser des transactions effectuées sur le Web et a été mis au point par :
- Netscape
- MasterCard
- Bank of America
- MCI
- Silicon Graphics
SSL est indépendant du protocole utilisé et agit en tant que couche supplémentaire entre la couche Application et la couche Transport. Il peut être utilisé avec :
- HTTP
- FTP
- POP
- IMAP
Fonctionnement de SSL
Le fonctionnement de SSL suit la procédure suivante :
- Le navigateur demande une page web sécurisée en https,
- Le serveur web émet sa clé publique et son certificat,
- Le navigateur vérifie que le certificat a été émis par une autorité fiable, qu'il est valide et qu'il fait référence au site consulté,
- Le navigateur utilise la clé publique du serveur pour chiffrer une clé symétrique aléatoire, une clé de session, et l'envoie au serveur avec l'URL demandé ainsi que des données HTTP chiffrées,
- Le serveur déchiffre la clé symétrique avec sa clé privée et l'utilise pour récupérer l'URL demandé et les données HTTP,
- Le serveur renvoie le document référencé par l'URL ainsi que les données HTTP chiffrées avec la clé symétrique,
- Le navigateur déchiffre le tout avec la clé symétrique et affiche les informations.
Quand on parle de SSL, on parle de cryptologie.
PKI
On appelle PKI (Public Key Infrastucture, ou en français infrastructure à clé publique (ICP), parfois infrastructure de gestion de clés (IGC)) l’ensemble des solutions techniques basées sur la cryptographie à clé publique.
Les cryptosystèmes à clés publiques permettent de s'affranchir de la nécessité d'avoir recours systématiquement à un canal sécurisé pour s'échanger les clés. En revanche, la publication de la clé publique à grande échelle doit se faire en toute confiance pour assurer que :
- La clé publique est bien celle de son propriétaire ;
- Le propriétaire de la clé est digne de confiance ;
- La clé est toujours valide.
Ainsi, il est nécessaire d'associer au bi-clé (ensemble clé publique / clé privée) un certificat délivré par un tiers de confiance : l'infrastructure de gestion de clés.
Le tiers de confiance est une entité appelée communément autorité de certification (ou en anglais Certification authority, abrégé CA) chargée d'assurer la véracité des informations contenues dans le certificat de clé publique et de sa validité.
Pour ce faire, l'autorité signe le certificat de clé publique à l'aide de sa propre clé en utilisant le principe de signature numérique.
Le rôle de l'infrastructure de clés publiques est multiple et couvre notamment les champs suivants :
- enregistrer des demandes de clés en vérifiant l'identité des demandeurs ;
- générer les paires de clés (clé privée / clé publique) ;
- garantir la confidentialité des clés privées correspondant aux clés publiques ;
- certifier l'association entre chaque utilisateurs et sa clé publique ;
- révoquer des clés (en cas de perte par son propriétaire, d'expiration de sa date de validité ou de compromission).
Une infrastructure à clé publique est en règle générale composée de trois entités distinctes :
- L'autorité d'enregistrement (AE ou RA pour Recording authority), chargée des formalité administratives telles que la vérification de l'identité des demandeurs, le suivi et la gestion des demandes, etc.) ;
- L'autorité de certification (AC ou CA pour Certification Authority), chargée des tâches techniques de création de certificats. L'autorité de certification est ainsi chargée de la signature des demandes de certificat (CSR pour Certificate Signing Request, parfois appelées PKCS#10, nom du format correspondant). L'autorité de certification a également pour mission la signature des listes de révocations (CRL pour Certificate Revocation List) ;
- L'Autorité de dépôt (Repository) dont la mission est de conserver en sécurité les certificats.
Certificats X509
Pour palier aux problèmes liés à des clefs publiques piratées, un système de certificats a été mis en place.
Le certificat permet d’associer la clef publique à une entité ou une personne. Les certificats sont délivrés par des Organismes de Certification.
Les certificats sont des fichiers divisés en deux parties :
- La partie contenant les informations
- La partie contenant la signature de l'autorité de certification
La structure des certificats est normalisée par le standard X.509 de l’Union internationale des télécommunications.
Elle contient :
- Le nom de l'autorité de certification
- Le nom du propriétaire du certificat
- La date de validité du certificat
- L'algorithme de chiffrement utilisé
- La clé publique du propriétaire
Le Certificat est signé par l'autorité de certification:
La vérification se passe ainsi:
Installation de ssl
Afin de pouvoir configurer le serveur apache en mode ssl, il est necessaire d'installer les paquets mod_ssl et openssl. Le paquet openssl étant déjà installé, installez donc mod_ssl :
[root@centos6 ~]# yum install mod_ssl
Configuration de SSL
Dans le cas où vous souhaitez générer vos propres clés, vous devez d'abord générer une clé privée, nécessaire pour la création d'un Certificate Signing Request. Le CSR doit alors être envoyé à une des sociétés faisant autorité en la matière afin que celle-ci puisse vous retourner votre certificat définitif. Ce service est payant. C'est ce certificat définitif qui est utilisé pour des connexions sécurisées.
Saisissez donc la commande suivante pour générer votre clé privée :
[root@centos6 ~]# openssl genrsa -out www.homeland.net.key 1024 Generating RSA private key, 1024 bit long modulus ........................................++++++ ..............++++++ e is 65537 (0x10001)
Générer maintenant votre CSR :
[root@centos6 ~]# openssl req -new -key www.homeland.net.key -out www.homeland.net.csr 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) [XX]:FR State or Province Name (full name) []:VAR Locality Name (eg, city) [Default City]:Toulon Organization Name (eg, company) [Default Company Ltd]:Linux E-Learning Organizational Unit Name (eg, section) []:Training Common Name (eg, your name or your server's hostname) []:centos.fenestros.loc Email Address []:root@localhost Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
et répondez aux questions qui vous sont posées. Notez bien la réponse à la question Common Name. Si vous ne donnez pas votre FQDN, certains navigateurs ne gèreront pas votre certificat correctement. Vous pouvez maintenant envoyé votre CSR à la société que vous avez choisie. Quand votre clé .crt vous est retournée, copiez-la, ainsi que votre clé privée dans le répertoire /etc/pki/tls/certs/.
Sans passer par un prestataire externe, vous pouvez signer votre CSR avec votre propre clé afin de générer votre certificat :
[root@centos6 ~]# openssl x509 -req -days 365 -in www.homeland.net.csr -signkey www.homeland.net.key -out www.homeland.net.crt Signature ok subject=/C=FR/ST=VAR/L=Toulon/O=Linux E-Learning/OU=Training/CN=centos.fenestros.loc/emailAddress=root@localhost Getting Private key
Cette procédure va générer trois fichiers dont votre clé privée et un certificat – une clé ayant une extension .crt.
Il convient ensuite de copier ces deux fichiers dans l'arborescence /etc/pki/tls :
[root@centos6 ~]# cp /root/www.homeland.net.key /etc/pki/tls/private/
[root@centos6 ~]# cp /root/www.homeland.net.crt /etc/pki/tls/certs/
Mise en place des paramètres de sécurité SSL
Créez maintenant le répertoire qui va contenir le site sécurisé :
# mkdir /www/ssl
Créez le fichier index.html pour notre site sécurisé :
# vi /www/ssl/index.html
Editez le fichier index.html ainsi :
- index.html
<html> <body> <center>Accueil du site SSL</center> </body> </html>
En consultant le contenu du répertoire /etc/httpd/conf.d, vous constaterez un fichier ssl.conf.
Ouvrez ce fichier et modifiez la ligne suivante :
#DocumentRoot "/var/www/html"
en :
DocumentRoot "/www/ssl"
Cette directive indique que la racine du site sécurisé sera /www/ssl.
Définissez ensuite les droits d'accès à ce site en ajoutant la section suivante à l'emplacement indiqué :
<Files ~ "\.(cgi|shtml|phtml|php3?)$"> SSLOptions +StdEnvVars </Files> # Ajoutez la section suivante <Directory "/www/ssl"> Order allow,deny Allow from all </Directory> # Fin <Directory "/var/www/cgi-bin"> SSLOptions +StdEnvVars </Directory>
Dernièrement modifiez les deux lignes suivantes :
SSLCertificateFile /etc/pki/tls/certs/localhost.crt SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
en :
SSLCertificateFile /etc/pki/tls/certs/www.homeland.net.crt SSLCertificateKeyFile /etc/pki/tls/private/www.homeland.net.key
respectivement.
Sauvegardez votre fichier et redémarrez votre serveur apache :
[root@centos6 ~]# service httpd restart Arrêt de httpd : [ OK ] Démarrage de httpd : [ OK ]
Passez en revue les directives contenues dans le fichier ssl.conf en utilisant le Manuel en ligne d'Apache.
Tester Votre Configuration
Pour tester votre serveur apache en mode SSL saisissez la commande suivante :
[root@centos6 ~]# openssl s_client -connect www.homeland.net:443 CONNECTED(00000003) depth=0 C = FR, ST = VAR, L = Toulon, O = Linux E-Learning, OU = Training, CN = centos.fenestros.loc, emailAddress = root@localhost verify error:num=18:self signed certificate verify return:1 depth=0 C = FR, ST = VAR, L = Toulon, O = Linux E-Learning, OU = Training, CN = centos.fenestros.loc, emailAddress = root@localhost verify return:1 --- Certificate chain 0 s:/C=FR/ST=VAR/L=Toulon/O=Linux E-Learning/OU=Training/CN=centos.fenestros.loc/emailAddress=root@localhost i:/C=FR/ST=VAR/L=Toulon/O=Linux E-Learning/OU=Training/CN=centos.fenestros.loc/emailAddress=root@localhost --- Server certificate -----BEGIN CERTIFICATE----- MIICqTCCAhICCQD2dnaBu4RrlTANBgkqhkiG9w0BAQUFADCBmDELMAkGA1UEBhMC RlIxDDAKBgNVBAgMA1ZBUjEPMA0GA1UEBwwGVG91bG9uMRkwFwYDVQQKDBBMaW51 eCBFLUxlYXJuaW5nMREwDwYDVQQLDAhUcmFpbmluZzEdMBsGA1UEAwwUY2VudG9z LmZlbmVzdHJvcy5sb2MxHTAbBgkqhkiG9w0BCQEWDnJvb3RAbG9jYWxob3N0MB4X DTEzMDcxNTA5MDUzMloXDTE0MDcxNTA5MDUzMlowgZgxCzAJBgNVBAYTAkZSMQww CgYDVQQIDANWQVIxDzANBgNVBAcMBlRvdWxvbjEZMBcGA1UECgwQTGludXggRS1M ZWFybmluZzERMA8GA1UECwwIVHJhaW5pbmcxHTAbBgNVBAMMFGNlbnRvcy5mZW5l c3Ryb3MubG9jMR0wGwYJKoZIhvcNAQkBFg5yb290QGxvY2FsaG9zdDCBnzANBgkq hkiG9w0BAQEFAAOBjQAwgYkCgYEAsgGH/CeTmW6E+3O2SRf4tVmPAcKKL5MAC3nl iZvKGE9+QSA1uD9QSxhtTkSaoQbgxfSxTxoZ533eRdwNFgeLbeUqhx8yhOwfzSV5 cNKE3ai4reIOcCMNxjxBWTFj1AH75NHlVH//S7u82GG+pWu+dhC29k+AasxHt2SD xA9wUv8CAwEAATANBgkqhkiG9w0BAQUFAAOBgQCdy/bJKFYCS9LFvEvqcUNizRjj GJaCqzjDdaC/rpYSDJgFIdt/UWu+DwGVylpSUsQBuG3ASmGblto3JbX2FXdjRj7N lcxAwtsna9bAoznc2pmRsoRaUKrohiT5iciK2r67uhNfrfgiCWTTpW7L+NZq0s1I O5dJLH16BMPaTkTRjg== -----END CERTIFICATE----- subject=/C=FR/ST=VAR/L=Toulon/O=Linux E-Learning/OU=Training/CN=centos.fenestros.loc/emailAddress=root@localhost issuer=/C=FR/ST=VAR/L=Toulon/O=Linux E-Learning/OU=Training/CN=centos.fenestros.loc/emailAddress=root@localhost --- No client certificate CA names sent --- SSL handshake has read 1435 bytes and written 310 bytes --- New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA Server public key is 1024 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1 Cipher : DHE-RSA-AES256-SHA Session-ID: 213134CCEB89F17051CDB476CAFB6EDE6173CB0CF74ED4FF219DECC27E1C8B60 Session-ID-ctx: Master-Key: 6A097818500070788FCFC4E9986966628D40F662B8448D24F83FCF1208FF205798D372E5FC6D7754A7C648841668134E Key-Arg : None Krb5 Principal: None PSK identity: None PSK identity hint: None TLS session ticket: 0000 - ab 27 98 fc 21 1c 09 d6-92 b9 b8 0c 52 7c ef 69 .'..!.......R|.i 0010 - 9a cf df f1 40 46 12 89-60 18 ea 42 72 c9 fa 20 ....@F..`..Br.. 0020 - 2d 91 96 66 b3 3a dc 11-da 3d 8c 11 fc 02 f9 d7 -..f.:...=...... 0030 - e3 96 cd 6f 61 69 e2 01-b0 ab c2 03 a4 e7 65 93 ...oai........e. 0040 - 5b da 38 dc 66 ad 7c 72-db 55 a4 47 30 c4 eb 91 [.8.f.|r.U.G0... 0050 - 8d 7e 56 d8 91 ad af 51-59 53 ef 62 3d 52 5c f4 .~V....QYS.b=R\. 0060 - 4a 96 01 b0 f2 32 08 8b-2d ae b3 9c bf 41 a3 83 J....2..-....A.. 0070 - 96 6b a4 37 f4 f6 4e 9d-43 01 ae 5c 08 01 c3 c0 .k.7..N.C..\.... 0080 - 85 31 ca d5 10 9f 4a 93-96 7a 87 aa 0e aa e7 1c .1....J..z...... 0090 - b4 e2 65 34 21 19 d9 58-9b 01 f8 b7 06 3c a9 fb ..e4!..X.....<.. 00a0 - d6 ae 6f 70 8b 23 de 19-e3 c2 88 53 3e 56 a6 19 ..op.#.....S>V.. 00b0 - 89 1d 62 a4 37 e6 d7 9f-d0 b2 08 e0 4a d1 f2 df ..b.7.......J... Start Time: 1373879544 Timeout : 300 (sec) Verify return code: 18 (self signed certificate) ---
A la suite de l'affichage, saisissez la ligne suivante :
GET / HTTP/1.0 [Entrée] [Entrée]
Vous obtiendrez un résultat similaire à celle-ci :
GET / HTTP/1.0 HTTP/1.1 200 OK Date: Mon, 15 Jul 2013 09:13:16 GMT Server: Apache/2.2.15 (CentOS) Last-Modified: Mon, 15 Jul 2013 09:08:02 GMT ETag: "7576-43-4e1893297286c" Accept-Ranges: bytes Content-Length: 67 Connection: close Content-Type: text/html; charset=UTF-8 <html> <body> <center>Accueil du site SSL</center> </body> </html> closed
Notez qu'il y a génération d'erreurs. Ceci est normal.
Procédez maintenant au test en utilisant votre navigateur en saisissant l'adresse :
https://www.homeland.net
Il est normal que la vérification échoue car dans ce cas il s'agit du certificat de test.
mod_header
HSTS ou HTTP Strict Transport Security est une caractéristique de sécurité qui permet à un site web d'informer les navigateurs qui le site web n'accepte que des connexions sécuriséés.
Pour mettre en place cette notification, il convient d'éditer le fichier /etc/httpd/conf.d/ssl.conf en faisant appel à mod_header afin que l'en-tête soit modifié :
# # When we also provide SSL we have to listen to the # the HTTPS port in addition. # Listen 443 Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
Dans ce cas, l'expiration de la notification est dans deux ans (63 072 000 secondes). Un navigateur visitant le site aujourd'hui verra donc l'expiration de deux ans. Si le navigateur reviens demain, celui-ci verra encore deux ans mais à partir de la date de demain.
Pour forcer les navigateurs à connecter en https, il convient d'inclure une règle de ré-ecriture dans la section du site principal de la balise VirtualHost qui se trouve dans notre cas dans le fichier /etc/httpd/conf/vhosts.d/Vhosts.conf :
... <VirtualHost *:80> DocumentRoot /var/www/html ServerName www.homeland.net <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} </IfModule> </VirtualHost> ...
Modifiez vos fichiers de configuration et re-démarrez le service httpd. Testez ensuite avec un navigateur le lien http://www.homeland.net.
<html> <DIV ALIGN=“CENTER”> Copyright © 2004-2017 I2TCH LIMITED </html>