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.
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)
Vous ne devriez probablement jamais utiliser la compression TLS. Certains agents utilisateurs (au moins Chrome) vont le désactiver de toute façon.
Vous pouvez utiliser sélectivement la compression HTTP
Vous pouvez toujours minifier
Parlons aussi de la mise en cache
Je vais supposer que vous utilisez un site Web de style HTTPS Everywhere.
Scénario:
Contenu statique comme css ou js:
Contenu HTML avec des informations sensibles à zéro (comme une page à propos de nous):
Contenu HTML contenant TOUTES les informations sensibles (comme un jeton CSRF ou un numéro de compte bancaire):
Cache-Control: no-store, must-revalidate
Vous pouvez utiliser la compression HTTP avec des données sensibles SI:
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.
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.)
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/