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.
Lorsque la politique HSTS est active pour unsite web, l'agent utilisateur compatible opère comme suit :
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.
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"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.
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.
# 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>
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")}
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;";
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";}
// Avec l' utilisation du paquet NPM helmet.varhelmet=require('helmet')...app.use(helmet.hsts({maxAge:31536000000,includeSubdomains:true,force:true}));
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>
// 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();}
# 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);}
config.force_ssl=true
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
//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}
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>
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);}}
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
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"}
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;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}