HTTP Strict Transport Security

  • Raccourci de la révision : Sécurité/HTTP_Strict_Transport_Security
  • Titre de la révision : HTTP Strict Transport Security
  • ID de la révision : 344083
  • Créé :
  • Créateur : Goofy
  • Version actuelle ? Non
  • Commentaire

Contenu de la révision

Le protocole HTTP Strict Transport Security (souvent abrégé en HSTS) est un dispositif de sécurité par lequel un site web peut déclarer aux navigateurs qu'ils doivent communiquer avec lui en utilisant exclusivement le protocole HTTPS, au lieu du HTTP.

Pourquoi est-ce utile ?

Si un site web accepte une connexion via HTTP et la redirige en HTTPS, l'utilisateur peut dans la phase initiale être en communication avec la version non-chiffrée du site avant la redirection, si par exemple il entre une adresse comme http://www.machin.com/ ou même seulement machin.com.

Ce qui ouvre une brèche potentielle à une attaque de l'homme du milieu (man-in-the-middle attack), par laquelle la redirection peut être détournée pour envoyer l'utilisateur vers un site malveillant au lieu de la version sécurisée de la page désirée.

Le mécanisme HTTP Strict Transport Security permet au site web d'informer le navigateur qu'il ne doit jamais charger le site utilisant le HTTP, et doit en revanche convertir toutes les requêtes en HTTP en requêtes HTTPS.

Un exemple d'utilisation

Vous vous connectez sur un point d'accès WiFi public dans un aéroport et commencez à naviguer sur le Web, vous vérifiez sur votre service bancaire en ligne l'état de votre compte et payez quelques factures. Malheureusement le point d'accès que vous utilisez est en fait l'ordinateur portable d'un pirate, et il intercepte votre requête initiale en HTTP et la redirige vers une copie frauduleuse du site de votre banque et non vers le site authentique. Et voilà comment vos données confidentielles se retrouvent entre les mains du pirate.

Le protocole Strict Transport Security résout ce problème ; si vous avez accédé une première fois au site de votre banque en utilisant le HTTPS, et que le site de la banque utilise le protocole Strict Transport Security, votre navigateur saura automatiquement qu'il ne doit utiliser que le HTTPS, ce qui empêchera les pirates de mener une attaque de type l'homme du milieu.

Activation du protocole Strict Transport Security

Activer le dispositif sur votre site consiste tout simplement à retourner l'en-tête HTTP  Strict-Transport-Security quand votre site reçoit une requête d'accès HTTPS :

Strict-Transport-Security: max-age=expireTime [; includeSubdomains]
expireTime
La durée exprimée en secondes, pendant laquelle le navigateur doit retenir que le site n'est accessible que par le protocole HTTPS.
includeSubdomains (facultatif)
Si ce paramètre facultatif est précisé, la règle s'appliquera également à tous les sous-domaines du site.
Note : l'en-tête Strict-Transport-Security est ignoré par le navigateur si on accède à votre site en utilisant le HTTP ; en effet, un attaquant malveillant peut intercepter les connexions via HTTP et injecter un autre en-tête ou le supprimer. Quand on accède à votre site via HTTPS sans erreur de certificat, le navigateur sait que le site est compatible HTTPS et respectera l'en-tête Strict-Transport-Security.

Comment le navigateur gère le protocole

La première fois qu'on accède à votre site via HTTPS et qu'il renvoie l'en-tête Strict-Transport-Security, le navigateur mémorise cette information, de sorte que toutes les tentatives ultérieures de connexion via HTTP utiliseront automatiquement le HTTPS en substitution.

Lorsque le délai d'expiration (expireTime) précisé dans l'en-tête Strict-Transport-Security arrive à son terme, la tentative suivante de charger le site via HTTP sera traitée comme normale au lieu d'être automatiquemùent convertie en HTTPS.

À chaque fois que l'en-tête Strict-Transport-Security est transmis au navigateur, celui-ci met à jour le délai d'expiration pour ce site, ce qui permet au concepteur du site de réactualiser cette information et éviter de dépasser le délai d'expiration.

Compatibilité des navigateurs

{{ CompatibilityTable() }}

Type Chrome Firefox (Gecko) Internet Explorer Opera Safari
Support basique 4.0.211.0 {{CompatGeckoDesktop("4.0")}} Pas de support 12 Pas de support
Type Chrome pour Android

Firefox Mobile

(Gecko)

IE Mobile

Opera

Mobile

Safari Mobile
Support basique 18

{{CompatGeckoDesktop("4.0")}}

Pas de support

compatibilité inconnue

Pas de support

Spécifications

Voir aussi

{{ languages( { "ja": "ja/Security/HTTP_Strict_Transport_Security"} ) }}

{{ languages( { "en": "en/Security/HTTP_Strict_Transport_Security"} ) }}

Source de la révision

<p>Le protocole<strong> HTTP&nbsp;Strict Transport Security</strong> (souvent abrégé en <em>HSTS</em>) est un dispositif de sécurité par lequel un site web peut déclarer aux navigateurs qu'ils doivent communiquer avec lui en utilisant exclusivement le protocole HTTPS, au lieu du <a href="http://fr.wikipedia.org/wiki/HTTP" title="en/HTTP">HTTP</a>.</p>
<h2 id="Pourquoi_est-ce_utile.C2.A0.3F">Pourquoi est-ce utile&nbsp;?</h2>
<p>Si un site web accepte une connexion via HTTP et la redirige en HTTPS, l'utilisateur peut dans la phase initiale être en communication avec la version non-chiffrée du site avant la redirection, si par exemple il entre une adresse comme <span class="nowiki">http://www.machin.com/</span> ou même seulement machin<span class="nowiki">.com</span>.</p>
<p>Ce qui ouvre une brèche potentielle à une <a href="http://fr.wikipedia.org/wiki/Attaque_de_l%27homme_du_milieu" title="http://fr.wikipedia.org/wiki/Attaque_de_l%27homme_du_milieu">attaque de l'homme du milieu </a>(man-in-the-middle attack), par laquelle la redirection peut être détournée pour envoyer l'utilisateur vers un site malveillant au lieu de la version sécurisée de la page désirée.</p>
<p>Le mécanisme <em>HTTP&nbsp;Strict Transport Security </em>permet au site web d'informer le navigateur qu'il ne doit jamais charger le site utilisant le HTTP, et doit en revanche convertir toutes les requêtes en HTTP en requêtes HTTPS.</p>
<h3 id="Un_exemple_d'utilisation">Un exemple d'utilisation</h3>
<p>Vous vous connectez sur un point d'accès WiFi public dans un aéroport et commencez à naviguer sur le Web, vous vérifiez sur votre service bancaire en ligne l'état de votre compte et payez quelques factures. Malheureusement le point d'accès que vous utilisez est en fait l'ordinateur portable d'un pirate, et il intercepte votre requête initiale en HTTP et la redirige vers une copie frauduleuse du site de votre banque et non vers le site authentique. Et voilà comment vos données confidentielles se retrouvent entre les mains du pirate.</p>
<p>Le protocole Strict Transport Security résout ce problème&nbsp;; si vous avez accédé une première fois au site de votre banque en utilisant le HTTPS, et que le site de la banque utilise le protocole Strict Transport Security, votre navigateur saura automatiquement qu'il ne doit utiliser que le HTTPS, ce qui empêchera les pirates de mener une attaque de type <i>l'homme du milieu</i>.</p>
<h2 id="Activation_du_protocole_Strict_Transport_Security">Activation du protocole Strict Transport Security</h2>
<p>Activer le dispositif sur votre site consiste tout simplement à retourner l'en-tête HTTP&nbsp; <code>Strict-Transport-Security </code>quand votre site reçoit une requête d'accès HTTPS :</p>
<pre>
Strict-Transport-Security:&nbsp;max-age=<em>expireTime</em> [; includeSubdomains]
</pre>
<dl>
  <dt>
    <code>expireTime</code></dt>
  <dd>
    La durée exprimée en secondes, pendant laquelle le navigateur doit retenir que le site n'est accessible que par le protocole HTTPS.</dd>
  <dt>
    <code>includeSubdomains</code> (<span style="background-color:#afeeee;">facultatif</span>)</dt>
  <dd>
    Si ce paramètre facultatif est précisé, la règle s'appliquera également à tous les sous-domaines du site.</dd>
</dl>
<div class="note">
  <strong>Note&nbsp;:</strong> l'en-tête <code>Strict-Transport-Security</code> est <strong>ignoré</strong> par le navigateur si on accède à votre site en utilisant le HTTP ; en effet, un attaquant malveillant peut intercepter les connexions via HTTP et injecter un autre en-tête ou le supprimer. Quand on accède à votre site via HTTPS sans erreur de certificat, le navigateur sait que le site est compatible HTTPS et respectera l'en-tête <code>Strict-Transport-Security</code>.</div>
<h2 id="Comment_le_navigateur_g.C3.A8re_le_protocole">Comment le navigateur gère le protocole</h2>
<p>La première fois qu'on accède à votre site via HTTPS et qu'il renvoie l'en-tête <code>Strict-Transport-Security</code>, le navigateur mémorise cette information, de sorte que toutes les tentatives ultérieures de connexion via HTTP utiliseront automatiquement le HTTPS en substitution.</p>
<p>Lorsque le délai d'expiration (<code>expireTime</code>) précisé dans l'en-tête Strict-Transport-Security arrive à son terme, la tentative suivante de charger le site via HTTP sera traitée comme normale au lieu d'être automatiquemùent convertie en HTTPS.</p>
<p>À chaque fois que l'en-tête Strict-Transport-Security est transmis au navigateur, celui-ci met à jour le délai d'expiration pour ce site, ce qui permet au concepteur du site de réactualiser cette information et éviter de dépasser le délai d'expiration.</p>
<h2 id="Compatibilit.C3.A9_des_navigateurs">Compatibilité des navigateurs</h2>
<p>{{ CompatibilityTable() }}</p>
<div id="compat-desktop">
  <table class="compat-table" height="98" width="543">
    <tbody>
      <tr>
        <th>Type</th>
        <th>Chrome</th>
        <th>Firefox (Gecko)</th>
        <th>Internet Explorer</th>
        <th>Opera</th>
        <th>Safari</th>
      </tr>
      <tr>
        <td>Support basique</td>
        <td>4.0.211.0</td>
        <td>{{CompatGeckoDesktop("4.0")}}</td>
        <td>Pas de support</td>
        <td>12</td>
        <td>Pas de support</td>
      </tr>
    </tbody>
  </table>
</div>
<div id="compat-mobile">
  <table class="compat-table" height="213" width="540">
    <tbody>
      <tr>
        <th>Type</th>
        <th>Chrome pour Android</th>
        <th>
          <p>Firefox Mobile</p>
          <p>(Gecko)</p>
        </th>
        <th>IE Mobile</th>
        <th>
          <p>Opera</p>
          <p>Mobile</p>
        </th>
        <th>Safari Mobile</th>
      </tr>
      <tr>
        <td>Support basique</td>
        <td>18</td>
        <td>
          <p>{{CompatGeckoDesktop("4.0")}}</p>
        </td>
        <td>Pas de support</td>
        <td>
          <p>compatibilité inconnue</p>
        </td>
        <td>Pas de support</td>
      </tr>
    </tbody>
  </table>
</div>
<h2 id="Sp.C3.A9cifications">Spécifications</h2>
<ul>
  <li><a class="link-https" href="https://tools.ietf.org/html/draft-ietf-websec-strict-transport-sec" title="https://tools.ietf.org/html/draft-ietf-websec-strict-transport-sec">IETF Draft</a></li>
</ul>
<h2 id="Voir_aussi">Voir aussi</h2>
<ul>
  <li>Ce billet :&nbsp;<a class="external" href="http://blog.sidstamm.com/2010/08/http-strict-transport-security-has.html" title="http://blog.sidstamm.com/2010/08/http-strict-transport-security-has.html">HTTP&nbsp;Strict Transport Security has landed!</a></li>
  <li>Cet autre billet :&nbsp;<a class="external" href="http://hacks.mozilla.org/2010/08/firefox-4-http-strict-transport-security-force-https/" title="http://hacks.mozilla.org/2010/08/firefox-4-http-strict-transport-security-force-https/">HTTP&nbsp;Strict Transport Security (force HTTPS)</a></li>
  <li>L'article sur OWASP : <a href="https://www.owasp.org/index.php/HTTP_Strict_Transport_Security" title="https://www.owasp.org/index.php/HTTP_Strict_Transport_Security">HTTP Strict Transport Security</a></li>
  <li>La page Wikipédia en français : <a href="http://fr.wikipedia.org/wiki/HTTP_Strict_Transport_Security" title="http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security">HTTP Strict Transport Security</a></li>
</ul>
<p>{{ languages( { "ja": "ja/Security/HTTP_Strict_Transport_Security"} ) }}</p>
<p>{{ languages( { "en": "en/Security/HTTP_Strict_Transport_Security"} ) }}</p>
Revenir à cette révision