Serveur
Transcription
Serveur
Sécurité • • • • • • • 1 Les différents aspects de la sécurité l'authentification HTTP Fonctionnalités de la cryptographie Cryptographie à clé publique Certificats numériques SSL (Secure Socket Layer) Configuration SSL Introduction 2 Les échanges entre un client et un serveur web nécessitent d'être sécurisés selon plusieurs aspects : authentification un client veut être sûr qu'il parle bien au serveur choisi et inversement confidentialité le client et le serveur veulent être sûrs que les informations qu'ils transmettent ne seront pas lisibles par d'autres intégrité il faut aussi avoir l'assurance que les informations transmises ne seront pas modifiées avant d'être reçues. habilitation limitation de l'accès aux ressources d'un serveur à un groupe d'utilisateurs sélectionnés Authentification HTTP 3 Le serveur web maintient une BD des noms et mots de passe utilisateurs Basée sur un modèle de question/réponse à travers une boîte de dialogue Possibilité de protéger des ressources identifiées Mais les infos transmises sur le réseau ne sont pas réellement cryptées Limitation : pas de prise en charge de la confidentialité ni de l'intégrité Acceptable dans un environnement ne nécessitant pas une forte sécurité (sites payants) Configuration de l'authentification HTTP 4 Basée sur web.xml Définition de contraintes de sécurité pour l'accès aux pages Habilitation des utilisateurs ou des groupes d'utilisateurs basée sur la notion de rôle Pour chaque rôle un type d'accès est spécifié Mais la liaison entre rôle et utilisateur dépend du serveur Sous tomcat /conf/tomcat-users Exemple 1 : authentification de base 5 Une nouvelle grille du loto est tirée mais pas encore publiée L'application web n'accorde l'accès à la page web qui affiche la future grille gagnante qu'aux utilisateurs dont le rôle est "directeur" 6 Exemple 1 : la servlet à protéger public class GrilleCachee extends HttpServlet { protected void doPost( HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { out.println("<html>");out.println("<head>"); out.println("<title>Servlet GrilleCachee</title>"); out.println("</head>");out.println("<body>"); out.println("<h1>La grille cachée gagnante est : 45,32,17,5,1</h1>"); out.println("</body>");out.println("</html>"); } finally { out.close();}} Exemple 1 : web.xml 7 <security-constraint> la ressource à protéger <display-name>UneContrainte</display-name> <web-resource-collection> <web-resource-name>Secret</web-resource-name> <url-pattern>/GrilleCachee</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> le rôle qui lui est associé <role-name>directeur</role-name> <auth-constraint> </auth-constraint> </security-constraint> La page affichée par la servlet GrilleCachee ne sera vue que par les utilisateurs associés au rôle directeur Exemple 1 : web.xml 8 authentification de base <login-config> <auth-method>BASIC</auth-method> </login-config> <security-role> <role-name>directeur</role-name> </security-role> spécification du rôle de sécurité Exemple 1 : conf/tomcat-users 9 <tomcat-users> <role rolename="tomcat"/> <role rolename="role1"/> <role rolename="directeur"/> <user username="tomcat" password="tomcat" roles="tomcat"/> <user username="both" password="tomcat" roles="tomcat,role1"/> <user username="role1" password="tomcat" roles="role1"/> <user password="boss" roles="directeur" username="boss"/> <user password="admin" roles="manager,admin" username="admin"/> </tomcat-users> Exemple 1 : formulaire d'authentification 10 Exemple 1 : affichage de la page protégée 11 Authentification à base de formulaire 12 L'authentification est basée sur des formulaires HTML Possibilité de créer des formulaires de connexion personnalisées Prise en compte de ce modèle d'authentification par le fichier de déploiement web.xml Exemple 2 : le formulaire personnalisé login.jsp 13 <html> Valeurs spéciales à utiliser <head> <title>Connection</title> </head> <body> <h2>Veuillez entrer vos nom et mot de passe</h2> <form method='post' action='j_security_check' > Votre identificateur :<input type='text' name='j_username'> <br><br> Votre mot de passe :<input type='password' name='j_password'> <br><br> <input type='submit'> </form> </body> </html> Exemple 2 : affichage du formulaire 14 Exemple 2 : modification de web.xml 15 <login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page> /login.jsp Page d'ouverture </form-login-page> <form-error-page> /erreur.jsp </form-error-page> </form-login-config> </login-config> Exemple 2 : utilisateur reconnu 16 Exemple 2 : utilisateur n'ayant pas les droit d'accès 17 Exemple 2 : accès refusé 18 Cryptographie 19 Science du secret (grec : kryptos) Techniques de chiffrement : transformation d'un message compréhensible en un message opaque Pour les décoder, il faut posséder une clé Ces techniques s'appuient sur des propriétés mathématiques Cryptographie à clé publique 20 Chaque participant possède 2 clés, une clé publique et une clé privée La clé publique est utilisée pour crypter le message à transmettre La clé privée est utilisée pour décrypter le message. Elle est non calculable à partir de la clé publique en un temps raisonnable La clé publique est disponible à tous à partir d'un annuaire Les 2 clés sont liées mais il est impossible de dériver l'une des clé à partir de l'autre La base mathématique est celle de la factorisation de grands nombres entiers (base de l'algorithme RSA Rivest, Shamir, Adelman 1977) Algorithmes à clé publique 21 Annuaire des clés publiques clé publique de Bob (CPb) clé publique d'Alice(CPa) Alice Bob Mess Mess clé publique de Bob (CPb) message en clair message en clair chiffrement message crypté clé privée de Bob (CSb) déchiffrement canal non sécurisé CPb(Mess) message crypté Confidentialité 22 Garantir que l'information transmise sera inintelligible à toute personne autre que les acteurs de la transaction Un message crypté par Alice avec la clef publique de Bob n'est déchiffrable que par ce dernier au moyen de sa clef secrète : on garantit ainsi la confidentialité de l'échange. Mais Bob n'est pas sûr qu'Alice soit l'émettrice L'analogie est celle de la boîte aux lettres : tout le monde peut envoyer du courrier à Bob, mais seul Bob peut le lire Authentification 23 Certifier à chaque correspondant que son interlocuteur est bien celui qu'il prétend être Message chiffré par Alice avec sa clé publique => seul le possesseur de la clé privée peut le déchiffrer => échange confidentiel Message chiffré par Alice avec sa clé secrète => déchiffrement par quiconque possède la clé publique d'Alice => seule Alice peut en être la source donc échange authentifié (Alice) CPb(CSa(Mess)) confidentialité authentification déchiffrement par CSb CSa(Mess)) déchiffrement pas CPa Mess Bob Intégrité 24 Garantir que le message n'a pas subi d'altérations. Un message chiffré par Alice n'a pas pu être altéré par un tiers car il aurait fallu, après qu'il l'ait décrypté, qu'il le recrypte avec la clé secrète d'Alice. On peut associer une signature numérique calculée à partir du message initial. Celle-ci change si un caractère a été supprimé ou modifié Architecture de confiance 25 On sait authentifier la source de l'échange, mais si l'émetteur (Alice) ne connaît pas personnellement son interlocuteur, comment être certain qu'il est bien celui qu'il prétend être. Cela a conduit à créer une autorité de certification (VeriSign, Thawte, ...) qui délivre des certificats attestant de l'identité correspondant à une clé publique. Le certificat délivré peut être considéré comme authentique car il est crypté avec la clé secrète de l'autorité de certification Si Alice utilise la clé publique de Bob, elle est certaine que c'est bien celle de Bob On parle de tiers de confiance car ce dispositif permet à 2 personnes qui ne se connaissent pas d'effectuer une transaction en toute confiance Certificats numériques 26 Pour obtenir un niveau de sécurité plus élevé Pour garantir confidentialité et intégrité et une authentification plus fiable Basés sur les techniques de cryptographie à clé publique Les clés sont stockées sur disque sous la forme de certificats numériques ils proviennent d'une autorité de certification (verisign,...) qui les vérifient et les signent Java intègre le support des certificats numériques Secure Socket Layer 27 Protocole qui se place entre le protocole niveau application HTTP et le protocole niveau transport TCP/IP Technologie qui permet une connexion sécurisée entre un navigateur web et un serveur web. Il utilise la cryptographie à clé publique pour échanger des clés symétriques qui chiffrent les échanges entre un client et un serveur Quel que soit le sens de la transmission, les données sont d'abord cryptées par l'émetteur puis envoyées et décryptées par le récepteur Le protocole SSL peut être limité à un certain nombre de pages du site et non au site tout entier. Les pages qui requièrent un accès sécurisé sont par exemple : pages de login, pages possédant des informations personnelles, pages de paiement électronique Fonctionnement de SSL 28 Serveur Navigateur (CPc,CSc) connaît CPs Authentification du destinataire (CPs,CSs) connaît CPc CSs(CPs) CPs chiffrée avec CSs déchiffrement avec CPs, puis comparaison = CPs ? le navigateur contrôle si clé signée par tiers de confiance sinon il demande à l'utilisateur décide de continuer ou pas clé symétrique générée pour la session chiffrée par CPs Confidentialité, Intégrité (dé)chiffrement par cléSym => Mess CPs(CléSym) CléSym(Mess) clé symétrique déchiffrée par CSs => connaissance privée commune (dé)chiffrement par cléSym => Mess 29 Authentification des applications web Authentification serveur Lors d'une tentative de communication avec un serveur web, celui-ci présente au navigateur des certificats authentifiant le site convoité SSL 2.0 n'offre que l'authentification coté serveur. Authentification client Essentiellement utilisé pour les transactions B2B, le serveur demande un certificat au navigateur web pour prouver que l'utilisateur est bien celui qu'il prétend être SSL 3.0 offre une authentification coté client. Le serveur demande le certificat du client. 30 31 Configuration de SSL 32 Pour qu'une application web soit sécurisée par SSL (HTTPS), il faut configurer le descripteur de déploiement web.xml la balise <security-constraint> doit contenir une balise <user-data-constraint> qui contient une balise <transport-guarantee> qui prend de manière standard la valeur CONFIDENTIAL CONFIDENTIAL implique que la donnée ne pourra pas être lue par un tiers Configuration de SSL 33 <security-constraint> <web-resource-collection> <web-resource-name> ... </web-resource-name> <url-pattern> ... </url-pattern> <http-method> ... </http-method> </web-resource-collection> visibilité de la ressource <auth-constraint> <role-name> ... </role-name> </auth-constraint> protection de l'échange <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transportguarantee> </user-data-constraint> </security-constraint> Configuration de SSL 34 pour indiquer au serveur que les authentifications de l'application se font sur la base des certificats du client et non avec un formulaire, il configurer la balise <login-config> <login-config> <auth-method> CLIENT-CERT </auth-method> </login-config> Le mécanisme SSL est transparent pour les servlets à condition de configurer le serveur