Přísné zabezpečení přenosu HTTP

HTTP Strict Transport Security ( HSTS ) je navrhovaný mechanismus bezpečnostní politiky pro HTTP , který umožňuje webovému serveru deklarovat agentovi uživatele (jako je webový prohlížeč), který je kompatibilní, že by s ním měl komunikovat pomocí zabezpečeného připojení. (Jako HTTPS ). Zásada je proto sdělena agentovi uživatele serverem prostřednictvím odpovědi HTTP v poli záhlaví s názvem „Strict-Transport-Security“. Zásada určuje časové období, během kterého musí agent uživatele přistupovat na server pouze zabezpečeným způsobem.

Všeobecné

Když je pro web aktivní zásada HSTS, kompatibilní uživatelský agent funguje takto:

  1. Automaticky nahradí všechny nezabezpečené odkazy zabezpečenými odkazy. Například http://www.example.com/une/page/ je před přístupem na server automaticky nahrazen https://www.example.com/une/page/ .
  2. Pokud nelze zajistit zabezpečení připojení (například certifikát TLS je podepsaný sám sebou), zobrazí se chybová zpráva a z důvodu této chyby odepře přístup uživatele k webu.

Zásady HSTS pomáhají chránit uživatele webových stránek před některými pasivními ( odposlechy ) a aktivními síťovými útoky . Útok typu man-in-the-middle nemůže zachytit požadavek, pokud je pro tento web aktivní systém HSTS.

Syntax

Aktivujte HSTS na jeden rok:

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

Aktivujte jej také pro subdomény:

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

Také povolte přidání webu do předinstalovaných seznamů:

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

Osvědčené postupy

  • HSTS musí být deklarován v primární doméně. Například https://sub.example.com musí také používat HSTS na https://example.com
  • Stránky z https://www.example.com by měly obsahovat požadavek na prostředek na https://example.com, aby byla zajištěna ochrana primární domény. Díky direktivě includeSubDomains to umožňuje ochranu všech subdomén .

Předinstalovaný seznam

HSTS chrání až po prvním připojení. Chcete-li opravit tuto vadu, prohlížeče nabízejí mechanismus předběžného načítání: Weby se mohou zaregistrovat na (v) https://hstspreload.org/ a požádat o zařazení do tohoto seznamu. Přítomnost parametru předběžného načtení zajišťuje jejich souhlas.

Podpěra, podpora

Prohlížeče podporující HSTS

  • Google Chrome a Chromium podporují HSTS od verze 4.0.211.0.
  • Podpora HSTS je ve zdrojích Firefoxu povolena od25. srpna 2010, je k dispozici od Firefoxu 4.0. Verze 17 prohlížeče má interně předdefinovaný seznam webových stránek, které musí být připojeny pomocí HSTS, aby se zabránilo únosu během prvního připojení, kdy prohlížeč neví, zda si web vyžádá HSTS nebo ne.
  • Rozšíření pro Firefox „  NoScript  “ vyžaduje HSTS od verze 1.9.8.9
  • Rozšíření pro Chrome / Firefox / Opera „  HTTPS Everywhere  “, odvozené od NoScript, zobecňuje koncept HSTS zahrnutím podmnožin cest pro určité domény a přepisuje nezabezpečené URI http: // domény v URI https: // relativní doména (například z http://en.wikipedia.org na https://en.wikipedia.org ).
  • Opera 12
  • Internet Explorer 11

Implementace

Záhlaví Strict-Transport-Security musí být zaslána prostřednictvím odpovědí HTTPS. Implementace na straně klienta by neměla respektovat záhlaví STS, která nejsou odesílána prostřednictvím odpovědí HTTPS nebo prostřednictvím odpovědí HTTPS, které nejsou správně nakonfigurovány, a bez důvěryhodného certifikátu. Následující fragmenty konfigurace serveru by měly být prováděny v kontextu konfiguračního bloku webu SSL a ukázkové kódy by měly být prováděny pouze v kontextu odpovědí HTTPS.

Maximální čas (maximální věk) je uveden v sekundách. 31536 000 sekund v níže uvedených příkladech lze nahradit většími nebo menšími hodnotami v závislosti na potřebách správce webového serveru.

Implementace Apache

# load module (example using [RHEL]) LoadModule headers_module modules/mod_headers.so # redirect all HTTP to HTTPS (optional) <VirtualHost *:80> ServerAlias * RewriteEngine On RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [redirect=301] </VirtualHost> # HTTPS-Host-Configuration <VirtualHost 10.0.0.1:443> # Use HTTP Strict Transport Security to force client to use secure connections only Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" # Further Configuration goes here [...] </VirtualHost>

Lighttpd implementace

Tato implementace protokolu je částečná a nenabízí přesměrování z nezabezpečeného prostředí.

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

Implementace Nginx

Tato implementace protokolu je částečná a nenabízí přesměrování z nezabezpečeného prostředí.

# Use HTTP Strict Transport Security to force client to use secure connections only add_header Strict-Transport-Security max-age=31536000;

Tato implementace protokolu je částečná a nenabízí přesměrování z nezabezpečeného prostředí.

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

Realizace laku

Tato implementace protokolu je částečná a nenabízí přesměrování z nezabezpečeného prostředí.

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

Implementace NodeJS

// Avec l' utilisation du paquet NPM helmet. var helmet = require('helmet') ... app.use(helmet.hsts({ maxAge: 31536000000, includeSubdomains: true, force: true }));

Implementace IIS

Záhlaví lze přidat úpravou souboru web.config.

Tato implementace protokolu je částečná a nenabízí přesměrování z nezabezpečeného prostředí.

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

Implementace 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 requests if ($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 output die(); }

Implementace Perlu

# Use HTTP Strict Transport Security to force client to use secure connections only use CGI; use URI; my $q = new CGI; my $url = URI->new($cgi->request_uri) my $use_sts = 1; if ($use_sts and $url->scheme eq '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); }

Implementace Ruby on Rails

config.force_ssl = true

Implementace ASP

Dim use_sts use_sts = True If use_sts = True And Request.Url.Scheme = "https" Then Response.AddHeader "Strict-Transport-Security","max-age=31536000" ElseIf use_sts = True And Request.Url.Scheme = "http" Then Response.Status="301 Moved Permanently" Response.AddHeader "Location", "https://" + Request.Url.Host + Request.Url.PathAndQuery End If

Implementace ASP.NET Core

//Startup.cs public void ConfigureServices(IServiceCollection services) { services.AddHsts(opts => { opts.MaxAge = TimeSpan.FromSeconds(31536000); // Activer pour les sous-domaines, et autoriser l'ajout du site dans les listes préchargées opts.IncludeSubDomains = true; opts.Preload = true; }); // Configuration des autres services } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (!env.IsDevelopment()) { app.UseHsts(); } app.UseHttpsRedirection(); // Configuration de l'application }

Implementace ColdFusion Markup Language (CFML)

Tato implementace protokolu je částečná a nenabízí přesměrování z nezabezpečeného prostředí.

<cfset use_sts = true> <cfif use_sts is "True"> <cfheader name="Strict-Transport-Security" value="max-age=31536000"> <cfelseif use_sts is "True"> <cfheader statuscode="301" statustext="Moved permanently"> <cfheader name="Location" value="https://" + CGI.SERVER_NAME + CGI.SCRIPT_NAME + CGI.QUERY_STRING> </cfif>

Implementace stránek JavaServer Pages (JSP)

use_sts = true; if(use_sts) { if(request.getScheme().equals("https")) { // Envoi de l'en-tête HSTS response.setHeader("Strict-Transport-Security", "max-age=31536000"); } else { response.setStatus(301); url = "https://" + request.getServerName() + request.getPathInfo() + request.getQueryString(); response.setHeader("Location", url); } }

Implementace Visual Basic .NET

Tato implementace protokolu je částečná a nenabízí přesměrování z nezabezpečeného prostředí.

Dim use_sts As Boolean = True If use_sts = True Then Response.AppendHeader("Strict-Transport-Security", "max-age=31536000") ElseIf use_sts = True Then Response.AppendHeader("Status-Code", "301") Response.AppendHeader("Location", "https://") End If

Implementace F5 BIG-IP LTM

Vytvořte iRule a použijte jej na svůj virtuální server HTTPS.

Tato implementace protokolu je částečná a nenabízí přesměrování z nezabezpečeného prostředí.

# iRule "Insert_HTTP_Strict_Transport_Security" when HTTP_RESPONSE { HTTP::header insert Strict-Transport-Security "max-age=31536000 ; includeSubDomains ; preload" }

Implementace HAProxy

Přidejte tento řádek do přední části HTTPS konfiguračního souboru.

Tato implementace protokolu je částečná a nenabízí přesměrování z nezabezpečeného prostředí.

http-response set-header Strict-Transport-Security max-age=31536000;\ includeSubDomains;\ preload;

Implementace OpenBSD httpd

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 }

Poznámky a odkazy

  1. (en) https://dev.chromium.org/sts
  2. http://linuxfr.org/news/hsts-arrive-dans-firefox-4
  3. (in) „  HTTP Strict Transport Security - Mozilla Security Blog  “ na Blogu Mozilla Security (přístup ke dni 20. října 2020 ) .
  4. (in) „  Preloading HSTS - Mozilla Security Blog  “ na Mozilla Security Blog (přístup ke dni 20. října 2020 ) .
  5. (in) https://www.eff.org/https-everywhere na webu nadace Electronic Frontier Foundation
  6. (in) „  Jak vám můžeme pomoci? - Opera Help  “ , na stránce Opera Help (přístup k 20. říjnu 2020 ) .
  7. (in) „  Přísné zabezpečení přenosu HTTP přichází do aplikace Internet Explorer 11 ve Windows 8.1 a Windows 7  “ na blogu Microsoft Edge ,9. června 2015(zpřístupněno 20. října 2020 ) .

externí odkazy