mozilla

Revision 344071 of 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 : 344071
  • 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

The first time your site is accessed using HTTPS and it returns the Strict-Transport-Security header, the browser records this information, so that future attempts to load the site using HTTP will automatically use HTTPS instead.

When the expiration time specified by the Strict-Transport-Security header elapses, the next attempt to load the site via HTTP will proceed as normal instead of automatically using HTTPS.

Whenever the Strict-Transport-Security header is delivered to the browser, it will update the expiration time for that site, so sites can refresh this information and prevent the timeout from expiring.

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 for Android

Firefox Mobile

(Gecko)

IE Mobile

Opera

Mobile

Safari Mobile
Support basique 18

{{CompatGeckoDesktop("4.0")}}

Pas de support

compat.

inconnue

Pas de support

Spécifications

Voir aussi

{{ languages( { "ja": "ja/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:#00ff00;">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 :</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>The first time your site is accessed using HTTPS and it returns the <code>Strict-Transport-Security</code> header, the browser records this information, so that future attempts to load the site using HTTP will automatically use HTTPS instead.</p>
<p>When the expiration time specified by the Strict-Transport-Security header elapses, the next attempt to load the site via HTTP&nbsp;will proceed as normal instead of automatically using HTTPS.</p>
<p>Whenever the Strict-Transport-Security header is delivered to the browser, it will update the expiration time for that site, so sites can refresh this information and prevent the timeout from expiring.</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 for 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>compat.</p>
          <p>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>
Revenir à cette révision