1 votes

Apache est incroyablement lent en HTTPS sur Chrome

J'ai vu cette question plusieurs fois posée sur ce site et d'autres, mais aucun d'entre eux ne m'a fourni une solution valable pour mon problème.

J'ai un serveur ubuntu 12.04 avec apache 2.2.22. Le trafic http fonctionne bien mais le trafic SSL est très lent. Pendant le chargement d'un site web, je peux voir les images se charger alors que dans la version http elles sont toutes presque immédiatement. J'ai effectué quelques tests :

HTTP :

ab -n 1000 -c 250 http://IP/test.jpeg
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking IP (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests

Server Software:        Apache/2.2.22
Server Hostname:        IP
Server Port:            80

Document Path:          /test.jpeg
Document Length:        19558 bytes

Concurrency Level:      250
Time taken for tests:   11.104 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      19842000 bytes
HTML transferred:       19558000 bytes
Requests per second:    90.06 [#/sec] (mean)
Time per request:       2775.995 [ms] (mean)
Time per request:       11.104 [ms] (mean, across all concurrent requests)
Transfer rate:          1745.05 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      254  549 872.4    270    3289
Processing:   518 2046 1584.9   1250    8370
Waiting:      258 1596 1532.1    724    7214
Total:        779 2595 2044.1   1525   10467

Percentage of the requests served within a certain time (ms)
  50%   1525
  66%   2192
  75%   3424
  80%   4248
  90%   6013
  95%   7175
  98%   7723
  99%  10189
 100%  10467 (longest request)

HTTPS :

ab -n 1000 -c 250 https://IP/test.jpeg
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking IP (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests

Server Software:        Apache/2.2.22
Server Hostname:        IP
Server Port:            443
SSL/TLS Protocol:       TLSv1/SSLv3,DHE-RSA-AES256-SHA,1024,256

Document Path:          /test.jpeg
Document Length:        19558 bytes

Concurrency Level:      250
Time taken for tests:   62.911 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      19842000 bytes
HTML transferred:       19558000 bytes
Requests per second:    15.90 [#/sec] (mean)
Time per request:       15727.734 [ms] (mean)
Time per request:       62.911 [ms] (mean, across all concurrent requests)
Transfer rate:          308.01 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:     1225 8408 3478.8   8733   14994
Processing:   957 6470 3693.6   5922   13997
Waiting:      258 2422 1720.7   1711    8113
Total:      10486 14878 4730.7  12594   27169

Percentage of the requests served within a certain time (ms)
  50%  12594
  66%  14805
  75%  14828
  80%  21609
  90%  22990
  95%  23136
  98%  27115
  99%  27125
 100%  27169 (longest request)

HTTPS avec maintien en vie :

ab -k -n 1000 -c 250 https://IP/test.jpeg
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking IP (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests

Server Software:        Apache/2.2.22
Server Hostname:        IP
Server Port:            443
SSL/TLS Protocol:       TLSv1/SSLv3,DHE-RSA-AES256-SHA,1024,256

Document Path:          /test.jpeg
Document Length:        19558 bytes

Concurrency Level:      250
Time taken for tests:   13.565 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Keep-Alive requests:    1000
Total transferred:      19852150 bytes
HTML transferred:       19558000 bytes
Requests per second:    73.72 [#/sec] (mean)
Time per request:       3391.342 [ms] (mean)
Time per request:       13.565 [ms] (mean, across all concurrent requests)
Transfer rate:          1429.14 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0 1051 2562.0      0   11662
Processing:   258  903 667.8    556    2710
Waiting:      254  466 460.8    268    1840
Total:        258 1954 2982.9    565   12518

Percentage of the requests served within a certain time (ms)
  50%    565
  66%    830
  75%   1096
  80%   1361
  90%   8746
  95%   8753
  98%   9244
  99%   9595
 100%  12518 (longest request)

Je peux comprendre que https peut être un peu plus lent que http et que cela devrait être atténué avec le keepalive mais je ne comprends toujours pas la grande différence et pourquoi je peux effectivement le voir charger incroyablement lentement. Je pense que c'est une mauvaise configuration que j'ai faite parce que dans le serveur de commande que j'ai installé, https n'est pas si lent, et de loin.

D'autres informations qui pourraient être utiles sont :

cat mods-available/ssl.conf |grep SSLRandomSeed
SSLRandomSeed startup builtin
SSLRandomSeed startup file:/dev/urandom 1024
SSLRandomSeed connect builtin
SSLRandomSeed connect file:/dev/urandom 1024

C'est ainsi que j'ai créé mes certificats :

openssl req -new -x509 -days 365 -nodes -out /etc/apache2/ssl/apache.pem -keyout /etc/apache2/ssl/apache.key

C'est la configuration pour default-ssl :

<VirtualHost *:443>
     SSLEngine On
     SSLCertificateFile /etc/apache2/ssl/apache.pem
     SSLCertificateKeyFile /etc/apache2/ssl/apache.key

     DocumentRoot /var/www/
     ErrorLog ${APACHE_LOG_DIR}/error.log
     CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Des idées ?

UPDATE :

Cette lenteur n'existe que dans Chrome jusqu'à présent... Firefox et Safari sont OK, ce qui peut certainement donner un indice, je vais enquêter à ce sujet.

1 votes

Vérifier les algorithmes de chiffrement que les navigateurs négocient avec le serveur.

1voto

Falcon Momot Points 24815

Vous utilisez /dev/urandom pour votre graine aléatoire, il ne s'agit donc pas d'un problème de blocage du pool d'entropie.

Si vous remarquez que l'ensemble du flux est lent (et pas seulement lent au démarrage, mais à un rythme lent) uniquement sur https, vous devez vérifier si votre serveur est correctement approvisionné. Le cryptage et la signature peuvent être assez gourmands en ressources CPU. top (et votre moyenne de charge). Si vous disposez d'une quantité déraisonnable de CPU ou de RAM, cela peut avoir un sens.

Notez également que le certificat n'est pas utilisé pour le cryptage proprement dit, mais uniquement pour l'échange de clés et la vérification de l'identité. Une clé de session aléatoire est générée et utilisée pour le cryptage en fonction des capacités et des préférences négociées entre le client et le serveur au début de la connexion. À titre de test, vous pouvez essayer de mettre quelque chose comme la désactivation de tous les ciphers sauf ceux de faible sécurité dans votre cipherspec.

0 votes

Merci beaucoup pour votre réponse rapide. Le processeur ne devrait pas poser de problème. 8 cœurs (et 16 gigaoctets) pour servir une page web statique devraient suffire. Vous mentionnez également la modification des codes de sécurité, mais je ne comprends pas. Vous voulez dire à 100% dans mon navigateur ? Ou dans le serveur ? Où puis-je trouver ces paramètres ? Je vous remercie de votre attention.

0 votes

J'ai mis à jour ma question car je me suis rendu compte qu'il n'y avait que chrome qui était aussi lent.

1 votes

Il se peut que le cryptogramme utilisé par chrome soit coûteux sur votre serveur ou sur votre client.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X