Movatterモバイル変換


[0]ホーム

URL:


Aller au contenu
Wikipédial'encyclopédie libre
Rechercher

HTTP Strict Transport Security

Un article de Wikipédia, l'encyclopédie libre.

HTTP Strict Transport Security (HSTS) est un mécanisme de politique de sécurité proposé pourHTTP, permettant à unserveur web de déclarer à un agent utilisateur (comme unnavigateur web), compatible, qu'il doit interagir avec lui en utilisant une connexion sécurisée (commeHTTPS). La politique est donc communiquée à l'agent utilisateur par le serveur via la réponse HTTP, dans le champ d'en-tête nommé « Strict-Transport-Security ». La politique spécifie une période de temps durant laquelle l'agent utilisateur doit accéder auserveur informatique uniquement de façon sécurisée.

Généralités

[modifier |modifier le code]

Lorsque la politique HSTS est active pour unsite web, l'agent utilisateur compatible opère comme suit :

  1. Il remplace automatiquement tous les liens non sécurisés par des liens sécurisés. Par exemple,http://www.exemple.com/une/page/ est automatiquement remplacé parhttps://www.exemple.com/une/page/ avant d'accéder au serveur.
  2. Si la sécurité de la connexion ne peut être assurée (par exemple, le certificatTLS est autosigné), celui-ci affiche unmessage d'erreur et interdit à l'utilisateur l'accès au site à cause de cette erreur.

La politique HSTS aide à protéger les utilisateurs de sites web contre quelques attaques réseau passives (écoute clandestine) et actives. Une attaque du typeman-in-the-middle ne peut pas intercepter de requête tant que le HSTS est actif pour ce site.

Syntaxe

[modifier |modifier le code]

Activer HSTS pour un an :

Strict-Transport-Security "max-age=31536000"

L'activer aussi pour les sous-domaines :

Strict-Transport-Security "max-age=31536000; includeSubDomains"

Autoriser aussi l'ajout du site dans les listes préchargées :

Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

Bonnes pratiques

[modifier |modifier le code]
  • HSTS doit être déclaré sur ledomaine. Par exemple, https://sub.example.com doit aussi utiliser HSTS sur https://example.com.
  • Les pages de https://www.example.com devraient inclure une requête vers une ressource sur https://example.com pour s'assurer que le domaine principal est protégé. Avec la directiveincludeSubDomains, cela permet de protéger l'intégralité des sous-domaines.

Liste préchargée

[modifier |modifier le code]

HSTS ne protège qu'après la première connexion. Afin de corriger ce défaut, les navigateurs proposent un mécanisme de préchargement : les sites peuvent s'enregistrer sur le site webhstspreload[1] pour demander leur inclusion dans cette liste. La présence du paramètrepreload permet de s'assurer de leur consentement.

Support

[modifier |modifier le code]

Navigateurs supportant HSTS

[modifier |modifier le code]
  • Google Chrome etChromium[2] supportent HSTS depuis la version 4.0.211.0.
  • Le support de HSTS est activé dans les sources deFirefox depuis le, il est disponible depuis Firefox 4.0[3],[4]. La version 17 du navigateur possède, en interne, une liste prédéfinie de sites web dont la connexion devra se faire en HSTS, ceci afin d'éviter un détournement lors de la première connexion où le navigateur ignore si le site demandera HSTS ou pas[5].
  • L'extension pour Firefox « NoScript » impose HSTS depuis la version 1.9.8.9.
  • L'extension pour Chrome/Firefox/Opera « HTTPS Everywhere », dérivée de NoScript, généralise le concept de HSTS en incluant des sous-ensembles de chemins pour certains domaines, et réécrit les URI non sécurisées http:// d'un domaine en URI https:// d'un domaine relatif (par exemple, dehttp://en.wikipedia.org àhttps://en.wikipedia.org)[6].
  • Opera 12[7].
  • Internet Explorer 11[8].

Implémentation

[modifier |modifier le code]

Les en-têtesStrict-Transport-Security doivent être envoyés via des réponses HTTPS. L'implémentation du côté client ne doit pas respecter les en-têtes HSTS qui ne sont pas envoyées via des réponses HTTPS, ou par le biais de réponses HTTPS qui ne sont pas configurées proprement, et sans certificat de confiance. Les bribes de configuration de serveur suivantes doivent être effectuées dans un contexte de bloc de configuration d'un site TLS et les exemples de codes ne doivent être effectués que dans un contexte de réponses HTTPS.

Le temps maximum (max-age) est donné en secondes. Les 31 536 000 secondes (soit 365 jours) dans les exemples ci-dessous peuvent être remplacées par des valeurs plus grandes ou petites en fonction des besoins du gestionnaire du serveur web.

Implémentation Apache

[modifier |modifier le code]
Article connexe :Apache HTTP Server.
# load module (example using [RHEL])LoadModuleheaders_modulemodules/mod_headers.so# redirect all HTTP to HTTPS (optional)<VirtualHost*:80>ServerAlias*RewriteEngineOnRewriteRule^(.*)$https://%{HTTP_HOST}$1[redirect=301]</VirtualHost># HTTPS-Host-Configuration<VirtualHost10.0.0.1:443># Use HTTP Strict Transport Security to force client to use secure connections onlyHeaderalwayssetStrict-Transport-Security"max-age=31536000; includeSubDomains; preload"# Further Configuration goes here[...]</VirtualHost>

Implémentation Lighttpd

[modifier |modifier le code]
Article connexe :Lighttpd.

Cette implémentation du protocole est partielle et ne propose pas la redirection à partir d'un environnement non sécurisé.

server.modules+=("mod_setenv")$HTTP["scheme"]=="https"{setenv.add-response-header=("Strict-Transport-Security"=>"max-age=31536000; includeSubDomains; preload")}

Implémentation Nginx

[modifier |modifier le code]
Article connexe :Nginx.

Cette implémentation du protocole est partielle et ne propose pas la redirection à partir d'un environnement non sécurisé.

# Use HTTP Strict Transport Security to force client to use secure connections onlyadd_headerStrict-Transport-Securitymax-age=31536000;

Cette implémentation du protocole est partielle et ne propose pas la redirection à partir d'un environnement non sécurisé.

# Use HTTP Strict Transport Security to force client to use secure connections only with includeSubdomainsadd_headerStrict-Transport-Security"max-age=31536000;includeSubDomains;preload;";

Implémentation Varnish

[modifier |modifier le code]
Article connexe :Varnish.

Cette implémentation du protocole est partielle et ne propose pas la redirection à partir d'un environnement non sécurisé.

// Add the following line to your vcl_deliver// Note: Varnish MUST be used with a frontend TLS proxy (e.g Hitch) for SSL/TLS supportsubvcl_deliver {setresp.http.Strict-Transport-Security="max-age=31536000; includeSubDomains";}

Implémentation NodeJS

[modifier |modifier le code]
Article connexe :Node.js.
// Avec l' utilisation du paquet NPM helmet.varhelmet=require('helmet')...app.use(helmet.hsts({maxAge:31536000000,includeSubdomains:true,force:true}));

Implémentation IIS

[modifier |modifier le code]
Article connexe :Internet Information Services.

L'en-tête peut être ajouté en modifiant le fichierweb.config.

Cette implémentation du protocole est partielle et ne propose pas la redirection à partir d'un environnement non sécurisé.

<configuration><system.webServer><httpProtocol><customHeaders><addname="Strict-Transport-Security"value="max-age=31536000"/></customHeaders></httpProtocol></system.webServer></configuration>

Implémentation PHP

[modifier |modifier le code]
Article connexe :PHP.
// Use HTTP Strict Transport Security to force client to use secure connections only$use_sts=true;// iis sets HTTPS to 'off' for non-SSL requestsif($use_sts&&isset($_SERVER['HTTPS'])&&$_SERVER['HTTPS']!='off'){header('Strict-Transport-Security: max-age=31536000; includeSubDomains; preload');}elseif($use_sts){header('Location: https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'],true,301);// we are in cleartext at the moment, prevent further execution and outputdie();}

Implémentation Perl

[modifier |modifier le code]
Article connexe :Perl (langage).
# Use HTTP Strict Transport Security to force client to use secure connections onlyuseCGI;useURI;my$q=newCGI;my$url=URI->new($cgi->request_uri)my$use_sts=1;if($use_stsand$url->schemeeq'https'){print$q->header('Strict-Transport-Security'=>'max-age=31536000; includeSubDomains; preload');}elsif($use_sts){$url->scheme('https');print$q->redirect(status=>301,location=>$url);}

Implémentation Ruby on Rails

[modifier |modifier le code]
Article connexe :Ruby on Rails.
config.force_ssl=true

Implémentation ASP

[modifier |modifier le code]
Article connexe :Active Server Pages.
Dimuse_stsuse_sts=TrueIfuse_sts=TrueAndRequest.Url.Scheme="https"ThenResponse.AddHeader"Strict-Transport-Security","max-age=31536000"ElseIfuse_sts=TrueAndRequest.Url.Scheme="http"ThenResponse.Status="301MovedPermanently"Response.AddHeader"Location","https://"+Request.Url.Host+Request.Url.PathAndQueryEndIf

Implémentation ASP.NET Core

[modifier |modifier le code]
Article connexe :ASP.NET Core.
//Startup.cspublicvoidConfigureServices(IServiceCollectionservices){services.AddHsts(opts=>{opts.MaxAge=TimeSpan.FromSeconds(31536000);// Activer pour les sous-domaines, et autoriser l'ajout du site dans les listes préchargéesopts.IncludeSubDomains=true;opts.Preload=true;});// Configuration des autres services}publicvoidConfigure(IApplicationBuilderapp,IWebHostEnvironmentenv){if(!env.IsDevelopment()){app.UseHsts();}app.UseHttpsRedirection();// Configuration de l'application}

Implémentation ColdFusion Markup Language (CFML)

[modifier |modifier le code]
Article connexe :ColdFusion.

Cette implémentation du protocole est partielle et ne propose pas la redirection à partir d'un environnement non sécurisé.

<cfsetuse_sts=true><cfifuse_stsis"True"><cfheadername="Strict-Transport-Security"value="max-age=31536000"><cfelseifuse_stsis"True"><cfheaderstatuscode="301"statustext="Moved permanently"><cfheadername="Location"value="https://"+CGI.SERVER_NAME+CGI.SCRIPT_NAME+CGI.QUERY_STRING></cfif>

Implémentation JavaServer Pages (JSP)

[modifier |modifier le code]
Article connexe :JavaServer Pages.
use_sts=true;if(use_sts){if(request.getScheme().equals("https")){// Envoi de l'en-tête HSTSresponse.setHeader("Strict-Transport-Security","max-age=31536000");}else{response.setStatus(301);url="https://"+request.getServerName()+request.getPathInfo()+request.getQueryString();response.setHeader("Location",url);}}

Implémentation Visual Basic .NET

[modifier |modifier le code]
Article connexe :Visual Basic .NET.

Cette implémentation du protocole est partielle et ne propose pas la redirection à partir d'un environnement non sécurisé.

Dimuse_stsAsBoolean=TrueIfuse_sts=TrueThenResponse.AppendHeader("Strict-Transport-Security","max-age=31536000")ElseIfuse_sts=TrueThenResponse.AppendHeader("Status-Code","301")Response.AppendHeader("Location","https://")EndIf

Implémentation F5 BIG-IP LTM

[modifier |modifier le code]
Article connexe :F5 BIP-IP LTM.

Créer une iRule et l'appliquer à votreVirtual Server HTTPS.

Cette implémentation du protocole est partielle et ne propose pas la redirection à partir d'un environnement non sécurisé.

# iRule "Insert_HTTP_Strict_Transport_Security"whenHTTP_RESPONSE{HTTP::headerinsertStrict-Transport-Security"max-age=31536000 ; includeSubDomains ; preload"}

Implémentation HAProxy

[modifier |modifier le code]

Ajouter cette ligne dans la partiefrontend HTTPS dufichier de configuration.

Cette implémentation du protocole est partielle et ne propose pas la redirection à partir d'un environnement non sécurisé.

http-responseset-headerStrict-Transport-Securitymax-age=31536000;\includeSubDomains;\preload;

Implémentation OpenBSD httpd

[modifier |modifier le code]
server "example.com" {  listen on 10.0.0.1 port 80  block return 301 "https://$HTTP_HOST$REQUEST_URI"}server "example.com" {  listen on 10.0.0.1 tls port 443  hsts max-age 31536000  hsts subdomain  hsts preload  # Further Configuration goes here}

Notes et références

[modifier |modifier le code]
  1. « HSTS Preload List Submission »(consulté le)
  2. (en)https://dev.chromium.org/sts
  3. « HSTS arrive dans Firefox 4 », surlinuxfr.org(consulté le).
  4. (en) « HTTP Strict Transport Security – Mozilla Security Blog », surMozilla Security Blog(consulté le).
  5. (en) « Preloading HSTS – Mozilla Security Blog », surMozilla Security Blog(consulté le).
  6. (en)https://www.eff.org/https-everywhere sur le site de l'Electronic Frontier Foundation
  7. (en) « How can we help you? - Opera Help », surOpera Help(consulté le).
  8. (en) « HTTP Strict Transport Security comes to Internet Explorer 11 on Windows 8.1 and Windows 7 », surMicrosoft Edge Blog,(consulté le).

Liens externes

[modifier |modifier le code]
Ce document provient de « https://fr.wikipedia.org/w/index.php?title=HTTP_Strict_Transport_Security&oldid=222333411 ».
Catégorie :
Catégories cachées :

[8]ページ先頭

©2009-2025 Movatter.jp