ปิดใช้งาน RC4 ในชุดรหัส SSL ของเซิร์ฟเวอร์ Apache


17

โปรดดูหัวข้อแก้ไขในคำตอบของฉันเอง พวกเขามีคำอธิบายถึงปริศนานี้

ฉันพยายามปิดการใช้งาน RC4 สำหรับเซิร์ฟเวอร์ Apache 2.2.9 ที่ทำงานบน CentOS 6.5 VPS และดูเหมือนว่าฉันจะไม่ประสบความสำเร็จ

มีการติดตั้งใบรับรองที่ตรวจสอบโดยธุรกิจที่ซื้อมาล่าสุดและการเชื่อมต่อ SSL ทำงานได้ดี แต่ฉันต้องการกำหนดค่าสิ่งต่างๆให้มากที่สุดเท่าที่จะทำได้เพื่อ "เพิ่มความปลอดภัย" เนื่องจากบทเรียนบางอย่างใช้

การตรวจสอบการกำหนดค่าด้วย Qualys SSL Labs หน้าผลลัพธ์จะแสดง "เซิร์ฟเวอร์นี้ยอมรับรหัส RC4 ซึ่งอ่อนตัวเกรดต่อยอดเป็น B"

อย่างไรก็ตามฉันได้ใส่ไว้ใน ssl.conf:

 SSLCipherSuite HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4:!SSLv2:!SSLv3

ฉันบันทึกสคริปต์ที่ให้ไว้ในคำตอบสำหรับคำถามนี้ในไฟล์ชื่อ test-ssl-ciphers.sh และเปลี่ยนที่อยู่ IP เป็นที่อยู่ลูปแบ็ค นี่คือผลลัพธ์ของ./test-ssl-ciphers.sh | grep -i "RC4":

Testing ECDHE-RSA-RC4-SHA...NO (sslv3 alert handshake failure)
Testing ECDHE-ECDSA-RC4-SHA...NO (sslv3 alert handshake failure)
Testing AECDH-RC4-SHA...NO (sslv3 alert handshake failure)
Testing ADH-RC4-MD5...NO (sslv3 alert handshake failure)
Testing ECDH-RSA-RC4-SHA...NO (sslv3 alert handshake failure)
Testing ECDH-ECDSA-RC4-SHA...NO (sslv3 alert handshake failure)
Testing RC4-SHA...NO (sslv3 alert handshake failure)
Testing RC4-MD5...NO (sslv3 alert handshake failure)
Testing RC4-MD5...NO (sslv3 alert handshake failure)
Testing PSK-RC4-SHA...NO (no ciphers available)
Testing KRB5-RC4-SHA...NO (no ciphers available)
Testing KRB5-RC4-MD5...NO (no ciphers available)
Testing EXP-ADH-RC4-MD5...NO (sslv3 alert handshake failure)
Testing EXP-RC4-MD5...NO (sslv3 alert handshake failure)
Testing EXP-RC4-MD5...NO (sslv3 alert handshake failure)
Testing EXP-KRB5-RC4-SHA...NO (no ciphers available)
Testing EXP-KRB5-RC4-MD5...NO (no ciphers available)

แต่ละบรรทัดเหล่านี้มี "ไม่" ซึ่งตามสคริปต์หมายความว่าเซิร์ฟเวอร์ไม่สนับสนุนชุดรหัสที่ระบุ

ยิ่งกว่านั้นคำสั่งgrep -i -r "RC4" /etc/httpdให้ฉันเฉพาะไฟล์ ssl.conf ที่กล่าวถึงข้างต้น

นอกจากนี้การทำงานopenssl ciphers -Vในชุดรหัสของฉันไม่แสดงรหัสยันต์ RC4 เลยซึ่งทำให้รู้สึกถึงการกำหนดค่าสตริง

ดังนั้นฉันจึงหลงทางว่าทำไมเว็บไซต์ตรวจสอบ SSL กำลังบอกฉันว่า "เซิร์ฟเวอร์ยอมรับ RC4" พวกเขายังแสดงรายการยันต์ต่อไปนี้ว่าเป็นที่ยอมรับ:

TLS_RSA_WITH_RC4_128_MD5
TLS_RSA_WITH_RC4_128_SHA
TLS_ECDHE_RSA_WITH_RC4_128_SHA

ใครบ้างมีคำอธิบายที่เป็นไปได้? ฉันทำอะไรผิดไป อาจมีอีกที่ที่รองรับ RC4 หรือ "การยอมรับ" ที่ถูกกำหนดค่า?

ขอบคุณ

[ แก้ไข ] การใช้ CentOS 6.6 ในเครื่องเสมือนที่บ้านฉันเรียกใช้สคริปต์กับ VPS อีกครั้งโดยใช้ชื่อโดเมนแทนที่อยู่ลูปแบ็ค การตั้งค่านี้แสดงว่ารายการ ciphers นั้นจัดทำโดยอินสแตนซ์ openssl ใน VM: ฉันยังไม่มี RC4 อยู่ใน ciphers ที่ให้ผล YES

คำตอบ:


16

ขณะติดตั้งใบรับรองที่ต่ออายุฉันค้นพบว่าปัญหาเกิดจากการระบุ (สำหรับโดเมนและสำหรับแต่ละโดเมนย่อย) ใน ISPConfig ชุดข้อมูลทั้งหมดที่จำเป็นสำหรับ HTTPS: ใบรับรอง, คีย์ส่วนตัว, CA เชน ฯลฯ

ใส่ชุดข้อมูลที่แตกต่างกันออกไปซึ่งนำไปสู่การทดสอบ Qualys เพื่อให้คะแนนโดเมน A และในเวลาเดียวกันให้ลบคำเตือนเกี่ยวกับ RC4 การใส่รายละเอียดกลับนำไปสู่การเตือนที่จะกลับมาและเกรดจะถูก จำกัด ที่ B อีกครั้งซึ่งทำให้ไม่มีข้อสงสัยใด ๆ เกี่ยวกับการเชื่อมโยงเวรกรรม

มันเหมือนกับว่าการให้รายละเอียดสำหรับแต่ละ vhost สร้างสภาพแวดล้อมใหม่ซึ่งค่าเริ่มต้นบางอย่างได้ถูกแทนที่ชุดรหัสที่ฉันได้ระบุไว้ใน ssl.conf แปลก.

วิธีแก้ไขคือการเพิ่มข้อมูลจำเพาะ SSLCipherSuite ในtextarea Apache Directivesสำหรับแต่ละ vhost นี่คือสิ่งที่ฉันมีในการกำหนดค่าที่ทำให้ฉันได้เกรด A:

SSLProtocol ALL -SSLv2 -SSLv3
SSLHonorCipherOrder on
# Compression is disabled by default on my distribution (CentOS 6)
# SSLCompression off 
SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS

แก้ไข (2017-05-16): การค้นพบเพิ่มเติมเกี่ยวกับปัญหานี้: การระบุSSLCipherSuiteเป็นสิ่งจำเป็น ฉันไม่สามารถเข้าใจว่าทำไมสั่งเฉพาะแม้จะระบุไว้ในระดับเซิร์ฟเวอร์ใช้ไม่ได้โดยอัตโนมัติเพื่อให้การกำหนดค่าโฮสต์เสมือน ฉันใช้ Apache 2.2.15 บน CentOS 6.9

แก้ไข (2018-06-18): ข้อมูลเพิ่มเติม ฉันเพิ่งค้นพบว่าSSLCipherSuiteคำสั่งสามารถระบุเวลาเดียวและมันจะนำไปใช้กับโฮสต์เสมือนทั้งหมดในแฟ้มการกำหนดค่าฐาน mod_ssl (บน CentOS 6 พบแฟ้มที่/etc/httpd/conf.d/ssl.conf) คุณก็ต้องระบุคำสั่งนอกของ virtualhost เริ่มต้น อาปาเช่ 2.2 SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXPเอกสารระบุว่าค่าเริ่มต้นของคำสั่งนี้คือ ฉันคิดว่านี่เป็นที่ที่รหัส RC4 มาจาก: ในกรณีที่ไม่มีข้อกำหนดใด ๆ ซึ่งเป็นกรณีของฉันเนื่องจากไม่มีข้อกำหนดอยู่ในบริบท "ทั่วโลก" ค่าเริ่มต้นจะนำไปใช้ ความเข้าใจนี้จบลงสิ่งที่เป็นปริศนาสำหรับฉัน อย่างแดกดันฉันกำลังจะเปลี่ยนเป็น CentOS 7 เมื่อฉันพบคำอธิบายนี้! HTH


6
SSLCipherSuite HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4:!SSLv2:!SSLv3
                                                                    ^^^^^^^

ความคิดที่ไม่ดี การปิดใช้งาน ciphers SSLv3 ทั้งหมดทำให้การปิดใช้งาน ciphers ที่ใช้งานได้กับ TLS1.0 และ TLS1.1 และปล่อย ciphers เพียงไม่กี่ตัวที่เพิ่งเปิดตัวด้วย TLS1.2 (หากเซิร์ฟเวอร์ของคุณรองรับ TLS1.2)

ดังนั้นฉันจึงหลงทางว่าทำไมเว็บไซต์ตรวจสอบ SSL กำลังบอกฉันว่า "เซิร์ฟเวอร์ยอมรับ RC4" พวกเขายังแสดงรายการยันต์ต่อไปนี้ว่าเป็นที่ยอมรับ:

ตรวจสอบให้แน่ใจว่าคุณทดสอบทั้งในและนอกสถานที่เข้าถึงเซิร์ฟเวอร์เดียวกัน (ที่อยู่ IP) ฉันเคยเห็นไซต์จำนวนมากที่example.comอยู่ในโฮสต์ที่แตกต่างจากwww.example.comและทำให้การทดสอบแตกต่างกัน


ใช่โดเมนรูทและโดเมนย่อยอยู่ใน VPS เดียวกัน มีที่อยู่ IP หนึ่งที่เชื่อมโยงกับ VPS และฉันใช้ ISPConfig เพื่อจัดการมัน ขอบคุณ
AbVog

ใช้SSLLabs เปรียบเทียบ IP ที่แสดงกับ IP ที่ระบบของคุณมี ตรวจสอบให้แน่ใจว่าคุณไม่มีพร็อกซี (ย้อนกลับ) อื่น ๆ หรือ CDN ด้านหน้าซึ่งอาจมีผลต่อผลลัพธ์
Steffen Ullrich

"การปิดใช้งาน ciphers SSLv3 ทั้งหมดทำให้การปิดใช้งาน ciphers ที่ใช้งานได้กับ TLS1.0 และ TLS1.1 และปล่อย ciphers เพียงไม่กี่ตัวที่เพิ่งเปิดตัวด้วย TLS1.2 (ถ้าเซิร์ฟเวอร์ของคุณรองรับ TLS1.2)" โซลูชันที่เหมาะสมคืออะไร
Rohn Adams

@RohnAdams: ถ้าเป้าหมายคือการปิดการใช้งาน RC4 กว่าส่วน '! RC4' ก็ดี ปัญหาคือการบล็อกโดยใช้ '! SSLv3' เพิ่มเติม ในฐานะที่เป็นยันต์ที่มีประโยชน์ในการใช้งานดูMozilla Cipher ปั่นไฟ
Steffen Ullrich

2

ห้องปฏิบัติการ SSL Qualys ดูเหมือนจะไวต่อโฮสต์เริ่มต้นมาก ฯลฯ ตรวจสอบว่า HTTPS VirtualHosts ทั้งหมดของคุณในที่อยู่ IP นั้นใช้การตั้งค่าเดียวกัน (นอกเหนือจากไฟล์ใบรับรอง) ฉันมีปัญหาคล้ายกันซึ่งการทดสอบ Qualys บางรายการทดสอบกับ VirtualHost เป้าหมายของฉันและ การทดสอบบางอย่างดูเหมือนจะรับ VirtualHost เริ่มต้น vhost เป้าหมายของฉันมีการเปิดใช้งาน cipher เพียงอันเดียว แต่ Qualys กำลังค้นหารายการที่ใหญ่กว่าจาก vhost เริ่มต้น

ฉันยังพบสคริปต์ที่ดูดีขึ้นที่นี่ซึ่งให้ข้อมูลที่ละเอียดยิ่งขึ้นเกี่ยวกับการทดสอบ SSL


2

เพียงแค่ดูผ่านสิ่งนี้สำหรับหนึ่งในเว็บไซต์ของฉัน จากคำตอบของ @ AbVog ฉันพบว่าคำสั่งของฉันเป็นจริงใน vhost เริ่มต้นเท่านั้น เมื่อฉันย้ายคำสั่งไปยังบริบทโลกทั้งหมดเป็นสิ่งที่ดี

นอกจากนี้ฉันยังเจอhttps://cipherli.st/ซึ่งมีรายการ SSL ที่ดีสำหรับแพ็คเกจต่าง ๆ คำแนะนำปัจจุบันสำหรับ apache ดังต่อไปนี้:

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff

# Requires Apache >= 2.4
SSLCompression off 
SSLSessionTickets Off
SSLUseStapling on 
SSLStaplingCache "shmcb:logs/stapling-cache(150000)" 

0

ใน Fedora 25 ของฉันกับ Apache / 2.4.25 ciphers ได้รับการจัดการโดยนโยบายการเข้ารหัสลับ (ดู / etc / cryptopolicies / backends) การตั้งค่าเริ่มต้นปิดใช้งาน RC4 อย่างสมบูรณ์ดังนั้นไม่จำเป็นต้องยุ่งเกี่ยวกับยันต์ในการตั้งค่า Apache ยกเว้นจากการตรวจสอบให้แน่ใจว่าคุณใช้ ssl.conf ล่าสุดเนื่องจากไม่ได้ติดตั้งโดยค่าเริ่มต้น แต่ปล่อยเป็น ssl.conf.rpmnew ในไดเรกทอรี conf.d

ในการกำหนดค่า SSL ฉันต้องระบุใบรับรอง ServerName และ DocumentRoot สำหรับ Squirrelmail นั่นก็คือ

SSLCertificateFile /etc/letsencrypt/live/mail.xxxx.dk/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mail.xxxx.dk/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/mail.xxxx.dk/chain.pem
SSLCACertificateFile /etc/letsencrypt/live/mail.xxxx.dk/fullchain.pem
ServerName mail.xxxx.dk:443
DocumentRoot "/usr/share/squirrelmail"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.