SSL Handshake เจรจาต่อรองกับ Nginx ช้ามาก


17

ฉันใช้ Nginx เป็นพร็อกซีถึงอินสแตนซ์ของ apache 4 ตัว ปัญหาของฉันคือการต่อรอง SSL ใช้เวลานาน (600 ms) ดูตัวอย่างนี้: http://www.webpagetest.org/result/101020_8JXS/1/details/

นี่คือ 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;

    }

}

เครื่องนี้เป็น VPS บน Linode ที่มี RAM 1 G ทุกคนช่วยบอกได้ไหมว่าทำไม SSL hand shake ใช้เวลานานมาก?

คำตอบ:


11

คุณต้องปิดการใช้งาน ciphers "ephemeral diffie-hellman" เบราว์เซอร์ไม่ได้ใช้งาน แต่ openSSL จะใช้กับเครื่องมือเช่น cURL หรือ apachebench ดังนั้นฉันจึงเดิมพันที่ webpagetest.org ใช้งานอยู่

ดูกระทู้นี้สำหรับรายละเอียดเพิ่มเติม

ฉันใช้การตั้งค่าเหล่านี้เป็นการส่วนตัวใน nginx เพื่อบังคับใช้ ciphers SSL ที่เร็วที่สุด แต่ยังคงปลอดภัยตามการตั้งค่าของเซิร์ฟเวอร์ไม่ใช่เบราว์เซอร์:

อัปเดต 2014-01-13: คำแนะนำนี้เปลี่ยนไปเมื่อมีการโจมตีล่าสุดใน RC4, อัปเดตเบราว์เซอร์ที่ป้องกัน BEAST และ TLS v1.2 ที่มีความพร้อมใช้งานมากขึ้นในไคลเอนต์และเซิร์ฟเวอร์

Updated 2015/10/16: Nginx ปัจจุบัน TLS ตั้งค่า 2015/10/16 ตามคำแนะนำของCloudFlare โปรดตรวจสอบลิงก์นำหน้าสำหรับการอัปเดตเนื่องจาก TLSv1 จะถูกลบออกจากการกำหนดค่าที่แนะนำในบางจุด การตั้งค่าปัจจุบันปิดใช้งาน SSLv3 และ RC4 ตามแนวทางปฏิบัติที่ดีที่สุดในปัจจุบันและ PCI-DSS ล่าสุด ณ วันนี้

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;

สิ่งนี้แทนที่คำแนะนำก่อนหน้านี้ในคำตอบนี้ซึ่งถูกลบออกเพื่อหลีกเลี่ยงการสับสน


RC4 ไม่ปลอดภัยและไม่เหมาะสมในการใช้ TLS "ในขณะที่อัลกอริทึม RC4 เป็นที่รู้กันว่ามีจุดอ่อนการเข้ารหัสที่หลากหลาย (ดู [26] สำหรับการสำรวจที่ยอดเยี่ยม) แต่ก็ไม่เคยมีการสำรวจมาก่อนว่าจุดอ่อนเหล่านี้สามารถใช้ประโยชน์ในบริบทของ TLS ได้อย่างไร อคติที่ค้นพบใน RC4 keystream จะสร้างช่องโหว่ที่ร้ายแรงใน TLS เมื่อใช้ RC4 เป็นอัลกอริธึมการเข้ารหัส " ดูในการรักษาความปลอดภัยของ RC4 ใน TLS และ WPA

2
@noloader ที่การโจมตีแบบ Rc4 ถูกประกาศหลายปีหลังจากโพสต์ จนกระทั่งเมื่อเร็ว ๆ นี้นักเข้ารหัสลับส่วนใหญ่ได้แนะนำ RC4 มากกว่า AES เนื่องจากการโจมตี BEAST กับ TLS v1.0 และก่อนหน้านี้ ตอนนี้เบราว์เซอร์ส่วนใหญ่ป้องกันฝั่งไคลเอ็นต์ BEAST และมีการโจมตี RC4 เพิ่มเติมคำแนะนำก็เปลี่ยนไป ดูโพสต์นี้สำหรับการตั้งค่า nginx ที่ดีสำหรับ TLS v1.2: blog.cloudflare.com/staying-on-top-of-tls-attacks
rmalayter

พุทโธ่! ขอโทษสำหรับเรื่องนั้น. ฉันไม่คิดว่าจะตรวจสอบวันที่ ขอโทษ

5

คุณอาจไม่มีแหล่งข้อมูลเอนโทรปีที่ดี ไม่/dev/urandomอยู่? ถ้าไม่ได้ Nginx /dev/randomจะป้องกันในการอ่าน

คีย์ของคุณมีขนาดเท่าใด อีกต่อไปช้าลง

ลองใช้straceกระบวนการเพื่อดูว่าพวกเขากำลังทำอะไร


+1 ดูเหมือนความเป็นไปได้ที่ดีเนื่องจาก Urandom มักจะหายไปใน VPSs
Kyle Brandt


0

เปลี่ยนแปลง

ssl_protocols  SSLv2 SSLv3 TLSv1;

ถึง

ssl_protocols  SSLv3 TLSv1 SSLv2;

พยายามโปรโตคอลในลำดับที่แสดงรายการ


ไม่ได้ช่วยจริงๆ ดูwebpagetest.org/result/101020_8KVR/1/details - การเจรจายังคงใช้เวลา> 50% ของเวลาทั้งหมด
Paras Chopra

2
ไม่ควรใช้ SSLv2 แต่จะไม่ปลอดภัย ในช่วงเวลาของความคิดเห็นนี้เบราว์เซอร์หลักทั้งหมดควรสนับสนุน TLSv1 ดังนั้น SSLv3 ก็ไม่จำเป็นอีกต่อไปเช่นกัน (ควรเป็น TLSv1 TLSv1.1 TLSv1.2 จนกระทั่งเบราว์เซอร์ส่วนใหญ่ใช้ 1.1)
KBeezie
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.