# Secure Socket Tunneling Protocol

Secure Socket Tunneling Protocol (SSTP) est un type de tunnel VPN qui fournit un mécanisme pour transporter PPP ou L2TP à travers un canal SSL 3.0. SSL fournit une sécurité au niveau transport avec une négociation de clés, le chiffrement, et le contrôle de l'intégrité des données. L'utilisation de SSL sur le port TCP HTTPS (443 par défaut) permet à SSTP de passer facilement à travers les pare-feu et les serveurs Proxy.

## Authentification

Le serveur SSTP doit être authentifié durant la phase SSL. Les clients SSTP peuvent optionnellement être authentifiés durant la phase SSL, et doivent obligatoirement être authentifiés dans la phase PPP. L'utilisation de PPP permet de supporter les méthodes d'authentifications les plus courantes, comme EAP-TLS et MS-CHAP.
SSTP est seulement utilisable dans un mode client vers site (client-to-site), il ne supporte pas les tunnels VPN site à site (site-to-site).

## Systèmes d'exploitation supportant SSTP

SSTP est disponible pour Linux, Mac OS, BSD et Windows.
Pour Windows, SSTP est disponible à partir de la version Windows Vista SP1.

## Limitation de performance

SSTP souffre des mêmes limitations de performance que les autres tunnels faisant de l’IP sur du TCP. En général les performances sont acceptables tant qu’il y a suffisamment de bande passante sur le lien pour garantir que les timers des sessions TCP tunnelées n’expirent pas. Si cela se produit, les performances chutent drastiquement. Ce problème est connu sous le nom de « TCP meltdown Problem ».

## Structure du Paquet
### En-tête

L’en-tête suivant est commune à tous les types de paquets SSTP :
En-tete SSTP :
| Bit offset | Bits 0–7 | Bits 0–7 | Bits 0–7 | Bits 0–7 | Bits 0–7 | Bits 0–7 | Bits 0–7 | Bits 0–7 | 8–14 | 8–14 | 8–14 | 8–14 | 8–14 | 8–14 | 8–14 | 15 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 |
| 0 | Version | Version | Version | Version | Version | Version | Version | Version | Reserved | Reserved | Reserved | Reserved | Reserved | Reserved | Reserved | C | Length | Length | Length | Length | Length | Length | Length | Length | Length | Length | Length | Length | Length | Length | Length | Length |
| 32+ | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data | Data |
* Version (8 bits) – Communique et négocie la version de SSTP qui est utilisée.
* Reserved (7 bits) – Réservé pour une utilisation future.
* C (1 bit) – Ce bit de Contrôle indique si le paquet SSTP est un paquet de contrôle SSTP. Le bit est positionné a 1 si le paquet SSTP est un paquet de contrôle.
* Length (16 bits) – Le champ longueur du paquet est composé de deux valeurs: Une partie Reserved et une partie Length.
* Reserved (4 bits) – Réservé pour une utilisation future.
* Length (12 bits) – Contient la longueur du paquet SSTP incluant l’en-tête.
* Data (variable) – Quand le bit de contrôle C est actif, ce champ contient un message de contrôle SSTP. Sinon, ce peut être uniquement du PPP.

### Message de Contrôle

Le champ data contient un message de contrôle SSTP uniquement quand le champ C de l’en-tête est activé.
SSTP Control Message :
| Bit offset | Bits 0–15 | Bits 0–15 | Bits 0–15 | Bits 0–15 | Bits 0–15 | Bits 0–15 | Bits 0–15 | Bits 0–15 | Bits 0–15 | Bits 0–15 | Bits 0–15 | Bits 0–15 | Bits 0–15 | Bits 0–15 | Bits 0–15 | Bits 0–15 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 | 16–31 |
| 0 | Message Type | Message Type | Message Type | Message Type | Message Type | Message Type | Message Type | Message Type | Message Type | Message Type | Message Type | Message Type | Message Type | Message Type | Message Type | Message Type | Attributes Count | Attributes Count | Attributes Count | Attributes Count | Attributes Count | Attributes Count | Attributes Count | Attributes Count | Attributes Count | Attributes Count | Attributes Count | Attributes Count | Attributes Count | Attributes Count | Attributes Count | Attributes Count |
| 32+ | Attributes | Attributes | Attributes | Attributes | Attributes | Attributes | Attributes | Attributes | Attributes | Attributes | Attributes | Attributes | Attributes | Attributes | Attributes | Attributes | Attributes | Attributes | Attributes | Attributes | Attributes | Attributes | Attributes | Attributes | Attributes | Attributes | Attributes | Attributes | Attributes | Attributes | Attributes | Attributes |
* Message Type (16 bits) – Spécifie le type de message de contrôle SSTP qui sera transmis. Il indique le nombre et le type d’attributs qui peut être transporté dans le message de contrôle SSTP.
* Attributes Count (16 bits) – Spécifie le nombre d'attributs ajoutés au message de contrôle SSTP.
* Attributes (variable) – Contient la liste des attributs associés au message de contrôle SSTP. Le nombre d’attributs est spécifié dans le champ Attributs Count.