web-dev-qa-db-fra.com

Pouvez-vous utiliser gzip sur SSL? Et connexion: en-têtes Keep-Alive

J'évalue les performances frontales d'une application Web sécurisée (SSL) ici au travail et je me demande s'il est possible de compresser des fichiers texte (html/css/javascript) via SSL. J'ai fait des recherches sur Google, mais je n'ai rien trouvé spécifiquement lié à SSL. Si cela est possible, cela vaut-il même les cycles de calcul supplémentaires, puisque les réponses sont également chiffrées? La compression des réponses nuirait-elle aux performances?

De plus, je veux m'assurer que la connexion SSL est maintenue afin que nous ne fassions pas la poignée de main SSL encore et encore. Je ne vois pas Connexion: Keep-Alive dans la réponse en-têtes. Je vois Keep-Alive: 115 dans les en-têtes request mais cela ne fait que maintenir la connexion active pendant 115 millisecondes (le serveur de l’application ferme la connexion après le traitement d’une seule demande?) le serveur doit définir cet en-tête response tant que le délai d'inactivité de la session est écoulé?

Je comprends que les navigateurs ne mettent pas en cache le contenu SSL sur le disque. Par conséquent, nous servons les mêmes fichiers à plusieurs reprises lors de visites ultérieures, même si rien n’a changé. Les principales recommandations d’optimisation sont la réduction du nombre de requêtes http, la minification, le déplacement des scripts en bas, l’optimisation des images, le partage de domaine possible (bien qu’il faille peser le coût d’une autre poignée de main SSL), ce genre de choses.

31
magenta

Oui, la compression peut être utilisée via SSL. cela a lieu avant que les données ne soient cryptées, donc vous pouvez aider avec des liens lents. Il est à noter que ceci est une mauvaise idée: cela ouvre également une vulnérabilité.

Après la prise de contact initiale, SSL est moins onéreux que beaucoup de gens le pensent * - même si le client se reconnecte, il existe un mécanisme permettant de poursuivre les sessions existantes sans renégocier les clés, ce qui entraîne une utilisation moindre du processeur et des allers-retours.

Cependant, les équilibreurs de charge peuvent utiliser le mécanisme de continuation: si les requêtes alternent entre les serveurs, des poignées de main supplémentaires sont nécessaires, ce qui peut avoir un impact notable (~ quelques centaines de ms par requête). Configurez votre équilibreur de charge pour transférer toutes les demandes de la même adresse IP vers le même serveur d'applications.

Quel serveur d'applications utilisez-vous? S'il ne peut pas être configuré pour utiliser keep-alive, compresser des fichiers, etc., envisagez de le placer derrière un proxy inverse qui peut content - L'article lié de HttpWatchSupport contient quelques astuces utiles à ce sujet).

(* Les fournisseurs de matériel SSL diront des choses comme "jusqu'à 5 fois plus de CPU" mais certains chaps de Google ont signalé que lorsque Gmail passait à SSL par défaut, cela ne représentait que ~ 1% de charge du processeur)

28
SimonJ
  1. Vous ne devriez probablement jamais utiliser la compression TLS. Certains agents utilisateurs (au moins Chrome) vont le désactiver de toute façon. 

  2. Vous pouvez utiliser sélectivement la compression HTTP

  3. Vous pouvez toujours minifier

  4. Parlons aussi de la mise en cache

Je vais supposer que vous utilisez un site Web de style HTTPS Everywhere.

Scénario:

  1. Contenu statique comme css ou js:

    • Utiliser la compression HTTP
    • Utiliser la minification
    • Longue période de cache (comme une année)
    • etag n'a qu'une utilité marginale (en raison de la longueur du cache)
    • Incluez une sorte de numéro de version dans l'URL de votre code HTML pointant vers cet actif afin que vous puissiez contourner le cache
  2. Contenu HTML avec des informations sensibles à zéro (comme une page à propos de nous):

    • Utiliser la compression HTTP
    • Utiliser la minification HTML
    • Utiliser une courte période de cache
    • Utilisez etag
  3. Contenu HTML contenant TOUTES les informations sensibles (comme un jeton CSRF ou un numéro de compte bancaire):

    • PAS de compression HTTP
    • Utiliser la minification HTML
    • Cache-Control: no-store, must-revalidate
    • etag est inutile ici (à cause de la revalidation)
    • une certaine logique pour rediriger la page après expiration de la session (en tenant compte de plusieurs onglets). Si quelqu'un appuie sur le bouton Précédent du navigateur, les informations sensibles ne sont pas affichées en raison de l'en-tête du cache. 

Vous pouvez utiliser la compression HTTP avec des données sensibles SI:

  1. Vous ne renvoyez jamais d'entrée utilisateur dans la réponse (vous avez un champ de recherche? N'utilisez pas la compression HTTP)
  2. Ou vous renvoyez une entrée utilisateur dans la réponse mais complétez la réponse de manière aléatoire
17
Neil McGuigan

L'utilisation de la compression avec SSL vous ouvre des vulnérabilités telles que BREACH, CRIME ou d'autres attaques en texte brut choisies.

Vous devez désactiver la compression, car SSL/TLS ne dispose actuellement d'aucun moyen d'atténuer ces attaques Oracle.

11
Rodney

A votre première question: SSL travaille sur une couche différente de celle de la compression. En un sens, ces deux fonctionnalités d’un serveur Web peuvent fonctionner ensemble et ne pas se chevaucher. Oui, en activant la compression, vous utiliserez plus de ressources processeur sur votre serveur, mais moins de trafic sortant. Donc, c'est plus un compromis.

À votre deuxième question: le comportement de Keep-Alive dépend vraiment de la version HTTP. Vous pouvez déplacer votre contenu statique sur un serveur autre que SSL (pouvant inclure des images, des films, du son, etc.)

0
Zepplock

Oui, la compression gzip et Keep-Alive peuvent être utilisés avec HTTPS/SSL. En outre, les navigateurs peuvent mettre en cache le contenu SSL.

Ce billet de blog contient plus d'informations sur le réglage d'un site Web pour HTTPS/SSL:

http://blog.httpwatch.com/2009/01/15/https-performance-tuning/

0