Nginx'te SSL El Sıkışma anlaşması çok yavaş


17

4 apache örnekleri için proxy olarak Nginx kullanıyorum. Benim sorunum SSL görüşmesinin çok zaman alması (600 ms). Bunu örnek olarak görün: http://www.webpagetest.org/result/101020_8JXS/1/details/

İşte benim Nginx Conf:

user www-data;
worker_processes  4;


events {
    worker_connections 2048;
    use epoll;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    access_log  /var/log/nginx/access.log;
    sendfile        on;
    keepalive_timeout  0;
    tcp_nodelay        on;
    gzip  on;
    gzip_proxied any;
    server_names_hash_bucket_size 128;


}

upstream abc {
     server 1.1.1.1 weight=1;
     server 1.1.1.2 weight=1;
     server 1.1.1.3 weight=1;


 }


server {
    listen   443;
    server_name  blah;

    keepalive_timeout 5;

    ssl  on;
    ssl_certificate  /blah.crt;
    ssl_certificate_key  /blah.key;
    ssl_session_cache  shared:SSL:10m;
    ssl_session_timeout  5m;
    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers   on;

    location / { proxy_pass http://abc;

                 proxy_set_header X-Real-IP  $remote_addr;
                 proxy_set_header Host $host;
                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    }

}

Makine, 1 G RAM ile Linode üzerinde bir VPS'dir. Herkes SSL El titremesinin neden yaşlandığını söyleyebilir mi?

Yanıtlar:


11

"Geçici diffie-hellman" şifrelerini devre dışı bırakmanız gerekir. Tarayıcılar bunları yine de kullanmaz, ancak openSSL, cURL veya apachebench gibi araçlarla kullanıldığında kullanılır. Bu yüzden webpagetest.org'un bunları kullandığına bahse girerim.

Daha fazla ayrıntı için bu konuya bakın.

Kişisel olarak nginx'te bu ayarları, tarayıcıların değil sunucunun tercihlerine göre en hızlı ama yine de güvenli SSL şifrelemelerini zorlamak için kullanıyorum:

Güncelleme 2014-01-13: RC4'e yapılan son saldırılar, BEAST'a karşı koruma sağlayan tarayıcı güncellemeleri ve istemciler ve sunucularda TLS v1.2'nin daha yaygın kullanılabilirliği göz önüne alındığında bu tavsiye değişti.

Güncelleme 2015-10-16: CloudFlare tarafından önerildiği gibi mevcut nginx TLS ayarları 2015-10-16 . TLSv1 muhtemelen bir noktada önerilen yapılandırmadan kaldırılacağından, lütfen önceki bağlantı için güncellemeleri kontrol edin. Geçerli ayarlar, bu tarihten itibaren geçerli en iyi uygulamaya ve en son PCI-DSS'ye göre SSLv3 ve RC4'ü devre dışı bırakır.

ssl_protocols               TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers                 EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers   on;

Bu, karışıklıktan kaçınmak için kaldırılan bu cevaptaki önceki tavsiyenin yerine geçer.


RC4 güvensizdir ve TLS'de kullanım için uygun değildir. "RC4 algoritmasının çeşitli kriptografik zayıflıklara sahip olduğu biliniyor olsa da (mükemmel bir anket için [26] 'ya bakınız), bu zayıflıkların TLS bağlamında nasıl kullanılabileceği daha önce araştırılmamıştır. RC4 anahtar akışında bulunan önyargılar, RC4'ü şifreleme algoritması olarak kullanırken TLS'de ciddi güvenlik açıkları yaratıyor. " Bkz TLS ve WPA'da RC4 Güvenliği Üzerinde .

2
@ noloader, Rc4 saldırısının görevimden yıllar sonra açıklandığını; yakın zamana kadar çoğu kriptograf, TLS v1.0 ve önceki sürümlere yönelik BEAST saldırısı nedeniyle AES üzerinden RC4 önermişti. Artık çoğu tarayıcı BEAST istemci tarafına karşı koruduğuna ve RC4'e karşı daha fazla saldırı gerçekleştiğine göre, tavsiye değişti. TLS v1.2 için bazı iyi nginx ayarları için bu gönderiye bakın
rmalayter

Aman! Bunun için üzgünüm. Tarihleri ​​kontrol etmeyi düţünmemiţtim. Afedersiniz.

5

İyi bir entropi kaynağınız olmayabilir. Var mı /dev/urandom? Değilse, Nginx okumayı engelleyecektir /dev/random.

Anahtarınızın boyutu nedir? Daha uzun olan daha yavaştır.

straceNe yaptıklarını görmek için süreçleri denemeye çalışın .


+1 Undom VPS'lerde genellikle eksik olduğu için iyi bir olasılık gibi görünüyor
Kyle Brandt

1

DNS çözümünü bir yerde beklemediğinizi kontrol edin.


0

Değişiklik

ssl_protocols  SSLv2 SSLv3 TLSv1;

için

ssl_protocols  SSLv3 TLSv1 SSLv2;

Protokolleri listelendikleri sırayla dener.


Gerçekten yardımcı olmadı. Bkz. Webpagetest.org/result/101020_8KVR/1/details - müzakere hala tüm zamanların>% 50'sini alıyor.
Paras Chopra

2
SSLv2 KULLANILMAMALIDIR, güvensizdir. Bu yorum sırasında tüm büyük tarayıcılar TLSv1'i desteklemelidir, böylece SSLv3'e artık gerek kalmamalıdır. (ideal olarak tarayıcıların çoğu 1.1 sürümüne ulaşıncaya kadar TLSv1 TLSv1.1 TLSv1.2 olmalıdır).
KBeezie
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.