fragen stichworte

Apache TLS (SSL) -Leistung

Wir betreiben einen ziemlich leistungsfähigen dedizierten Server mit einer Xeon-CPU, 32 GB RAM und RAID-SSDs, auf denen Centos 6 ausgeführt wird. Trotzdem sehen wir immer noch, dass HTTPS mehr als 100 ms zu unserer Seiten-Downloadzeit hinzufügen. Gibt es etwas, was wir tun können, um sogar eine Beschleunigung von 20 ms zu erreichen?

Hier sind Apache-Einstellungen:

SSLHonorCipherOrder on

SSLRandomSeed startup file:/dev/urandom 512
SSLRandomSeed connect file:/dev/urandom 512

SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-EC$
SSLProxyCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECD$

SSLProtocol all -SSLv3 -SSLv2
SSLProxyProtocol all -SSLv3 -SSLv2

SSLPassPhraseDialog  builtin
SSLSessionCache        "shmcb:/var/run/ssl_scache(5120000)"
SSLSessionCacheTimeout  300

SSLUseStapling On

SSLStaplingCache "shmcb:/var/run/ssl_stapling(128000)"
SSLStaplingReturnResponderErrors off

SSLStaplingStandardCacheTimeout 3600
SSLStaplingErrorCacheTimeout 600
SSLStaplingResponderTimeout 5

antworten

HTTPS verlangsamt Ihre Website trotz aller gegenteiligen Behauptungen. Dies liegt daran, dass der Client und der Server die SSL/TLS-Verschlüsselungen aushandeln müssen, bevor sie starten können. Allerdings nach, dass die Verlangsamung für die meisten Websites vernachlässigbar ist, und es gibt massive Vorteile für SSL.

Zusätzlich ist der Standard http, also muss jemand, der das für eine https-only-Site eingibt, auf die https-Version umgeleitet werden, die zu einer anderen Rundreise führt.

100ms ist eigentlich keine so schlechte Verlangsamung für die anfängliche Verbindung und, wie ich sagte, danach wird die Verbindung aufgebaut und so wird es keine Verlangsamung geben. Also zuerst, obwohl die anfängliche Verbindungsgeschwindigkeit wichtig ist, ist das Durchsuchen einer Site auch sehr wichtig, und hier sollte man nicht von der Verlangsamung von 100 ms betroffen sein.

Ihre SSL/TLS-Konfiguration sieht tatsächlich ziemlich gut aus, sowohl was die Sicherheit als auch die Leistung angeht. Sie verwenden moderne und schnelle Chiffren und Suites (obwohl Ihre Cipher-Suite nur sehr restriktiv für neue Browser ist und wenn dies beabsichtigt ist, können Sie auch TLSv1 und TLSv1.1 deaktivieren), lassen Sie SSL Caching einrichten (um Clients zu speichern) Neuverhandlung einer SSL-Sitzung für jede Verbindung) und SSL-Heften eingerichtet (um dem Client eine zusätzliche Suche zu ersparen, um die Gültigkeit Ihres Zertifikats zu überprüfen).

Aber einige Dinge, die ich vorschlagen kann, sind unten. Dies kann die Auswirkungen der Verwendung von https verringern, reduziert jedoch nicht die anfängliche Verbindungsverzögerung von 100 ms:

  1. Stellen Sie sicher, dass Keep-Alives für den Server aktiviert sind (sollte standardmäßig sein, sollte aber am besten überprüft werden). Sie sollten sicherstellen, dass Sie nicht in der Antwort einen Header "Connection: close" sehen. Ohne Keep-Alive ist Ihr SSLCache sinnlos.

  2. Erhöhen Sie Ihre SSLSessionCacheTimeout von 300 Sekunden oder 5 Minuten. Wenn Sie auf Ihrer Website surfen und herumstöbern, könnten Sie leicht darüber hinausgehen. Sie haben die Größe Ihres SSLSessionCache bereits begrenzt, so dass es nicht schadet, dieses Zeitlimit auf etwas Höheres zu erhöhen.

  3. Implementieren Sie HSTS, um dem Browser mitzuteilen, dass Ihre Website immer https bevorzugt (auch wenn der Benutzer kein Protokoll in die Adressleiste seines Browsers eingibt - oder sogar, wenn er http eingibt). Dies wird die anfängliche Umleitung speichern.

  4. HTTP/2 wird mit der Geschwindigkeit der https-Verbindung helfen, da Sie nicht mehr parallele Verbindungen dafür verwenden, sondern, was noch wichtiger ist, die Performance auf andere Weise unterstützt. Es ist immer noch experimentell für Apache (obwohl scheint stabil genug für mich).

Ich würde auch empfehlen, dass Sie Ihren Server regelmäßig über https://www.sslabs.com/ssltest/index.html ausführen, um Ihre SSL/TLS-Konfiguration zu testen, da sich die Dinge in diesem Bereich ständig ändern Verwundbarkeiten gefunden.

Sie können HTTP/2 aktivieren, wodurch die Anzahl der Verbindungen für kompatible Browser reduziert und die Ladezeit der Seite verringert wird. Die Latenz für diese Verbindung wird dadurch jedoch nicht verringert. Demo hier.

Siehe auch diese Frage - Latenz ist in dieser Situation der Schlüssel. Ich habe einen Geschwindigkeitstest mit meinem https-Server in Sydney (Australien) durchgeführt. Von einem anderen Sydney-Server aus getestet, ist der SSL-Handshake 46ms, von EC2 in den USA 213ms. Der Unterschied ist auf die Round-Trip-Paketzeit zurückzuführen. Außerdem ist ein unvermeidbarer Overhead erforderlich, selbst wenn die Latenz null ist. Ich weiß nicht, was diese zwingende Latenzzeit ist, aber Sie könnten es wahrscheinlich durch Experimente herausfinden.

Haben Sie Ihre Tests von einem Client aus in der Nähe Ihres Servers oder in weiter Ferne durchgeführt - was ist der Ping? Eine weitere nützliche Seite rund um den https Handshake. 100ms ist wahrscheinlich nicht so schlimm wie ein Aufwand für https.

Es könnte Apache-Tweaks geben, die jemand empfehlen kann. Wenn Sie Ihren Website-Link posten, könnte jemand einen Blick darauf werfen.

Dies ist keine große Antwort, aber wenn Sie bereit sind zu lernen, wie SSL funktioniert, bevor Sie es optimieren, ist hier eine Checkliste für schnelles HTTPS:

  • ECDSA-Zertifikat
  • Entropiequelle
  • TLS1.2-Protokoll
  • Hardware-unterstützte Verschlüsselungen: AES-NI
  • SSL-Sitzungscache
  • OCSP-Heftung
  • HTTP/2

Alle meine Server-bezogenen Kenntnisse werden in diesem Repository https://github.com/szepeviktor/debian-server-tools

veröffentlicht

Alles Gute!