Menonaktifkan RC4 di suite sandi SSL server Apache

17

Silakan, lihat bagian EDIT dalam jawaban saya sendiri; mereka berisi penjelasan untuk teka-teki ini .

Saya mencoba untuk menonaktifkan RC4 untuk server Apache 2.2.9 yang berjalan pada CentOS 6.5 VPS dan sepertinya saya tidak berhasil.

Sertifikat yang divalidasi bisnis yang baru dibeli diinstal dan koneksi SSL berfungsi dengan baik, tetapi saya ingin mengonfigurasi beberapa hal sebaik mungkin, untuk "memperkeras keamanan" seperti yang dijelaskan oleh beberapa tutorial.

Memeriksa konfigurasi dengan Qualys SSL Labs, halaman hasil menunjukkan "Server ini menerima cipher RC4, yang lemah. Nilai dibatasi hingga B."

Namun, saya telah meletakkan ini di ssl.conf:

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

Saya telah menyimpan skrip yang diberikan dalam jawaban untuk pertanyaan ini dalam file bernama test-ssl-ciphers.sh dan mengubah alamat IP menjadi alamat loopback. Ini adalah hasil dari ./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)

Setiap baris ini berisi "TIDAK", yang menurut skrip, berarti server tidak mendukung kombinasi sandi yang ditentukan.

Selain itu, perintah grep -i -r "RC4" /etc/httpdhanya memberi saya file ssl.conf yang disebutkan di atas.

Juga, berjalan openssl ciphers -Vpada cipher suite saya tidak menunjukkan cipher RC4 sama sekali, yang masuk akal mengingat string konfigurasi.

Karena itu saya entah bagaimana kehilangan mengapa situs web cek SSL mengatakan kepada saya bahwa "server menerima RC4". Mereka bahkan mendaftar cipher berikut sebagai diterima:

TLS_RSA_WITH_RC4_128_MD5
TLS_RSA_WITH_RC4_128_SHA
TLS_ECDHE_RSA_WITH_RC4_128_SHA

Adakah yang punya penjelasan yang memungkinkan? Apa yang saya lakukan salah? Mungkin ada tempat lain di mana dukungan RC4 atau "penerimaan" dikonfigurasi?

Terima kasih.

[ EDIT ] Menggunakan CentOS 6.6 di mesin virtual di rumah, saya menjalankan skrip terhadap VPS saya menggunakan nama domainnya alih-alih alamat loopback. Pengaturan ini menyiratkan bahwa daftar cipher disediakan oleh instance openssl di VM: Saya masih tidak memiliki RC4 di antara cipher yang menghasilkan YA.

AbVog
sumber

Jawaban:

16

Saat memasang sertifikat yang diperbarui, saya menemukan bahwa masalahnya disebabkan oleh menentukan (untuk domain dan untuk setiap subdomain) di ISPConfig seluruh rangkaian data yang diperlukan untuk HTTPS: sertifikat, kunci pribadi, rantai CA, dll.

Dengan kata lain, menghapus kumpulan data mengarah ke tes Qualys untuk menilai domain A dan pada saat yang sama menghapus peringatan tentang RC4. Menempatkan detail kembali mengarah ke peringatan yang datang kembali dan kelas ditutup pada B lagi, yang tidak meninggalkan keraguan untuk kaitan kausalitas.

Seolah-olah pemberian rincian untuk setiap vhost entah bagaimana menciptakan lingkungan baru di mana beberapa default telah menimpa suite sandi yang saya tentukan di ssl.conf. Aneh.

Solusinya adalah dengan menambahkan spesifikasi SSLCipherSuite di Apache Directives textarea untuk setiap vhost. Inilah yang saya miliki dalam konfigurasi yang membuat saya mendapat nilai 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

EDIT (2017-05-16): Temuan tambahan tentang masalah ini: menentukan SSLCipherSuiteadalah wajib. Saya tidak dapat mengerti mengapa itu direktif khusus, meskipun ditentukan pada tingkat server tidak secara otomatis berlaku untuk konfigurasi virtual host . Saya menjalankan Apache 2.2.15 pada CentOS 6.9.

EDIT (2018-06-18): Informasi lebih lanjut. Saya baru saja menemukan bahwa SSLCipherSuitedirektif dapat ditentukan satu waktu dan itu akan berlaku untuk semua virtual host: di dasar mod_ssl file konfigurasi (pada CentOS 6, file tersebut ditemukan di /etc/httpd/conf.d/ssl.conf), Anda hanya perlu menentukan direktif luar dari virtualhost default. Dokumentasi Apache 2.2 menyatakan bahwa nilai default dari arahan ini adalah SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP. Saya rasa ini adalah asal dari cipher RC4: dengan tidak adanya spesifikasi, yang merupakan alasan bagi saya karena tidak ada spesifikasi dalam konteks "global", nilai default berlaku. Pemahaman ini mengakhiri apa yang telah menjadi misteri bagi saya. Ironisnya, saya akan beralih ke CentOS 7 ketika saya menemukan penjelasan ini! HTH.

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

Ide buruk. Menonaktifkan semua cipher SSLv3 menghasilkan menonaktifkan cipher yang dapat digunakan dengan TLS1.0 dan TLS1.1 dan hanya menyisakan beberapa cipher yang baru diperkenalkan dengan TLS1.2 (jika server Anda mendukung TLS1.2)

Karena itu saya entah bagaimana kehilangan mengapa situs web cek SSL mengatakan kepada saya bahwa "server menerima RC4". Mereka bahkan mendaftar cipher berikut sebagai diterima:

Pastikan Anda lokal dan tes eksternal mengakses server yang sama (alamat IP). Saya telah melihat banyak situs example.comyang memiliki host berbeda www.example.comdan dengan demikian tes berbeda.

Steffen Ullrich
sumber
Ya, domain root dan subdomain-nya berada di VPS yang sama. Ada satu alamat IP yang terkait dengan VPS dan saya menggunakan ISPConfig untuk mengelolanya. Terima kasih.
AbVog
Gunakan SSLLabs . Bandingkan IP yang mereka tunjukkan dengan IP yang dimiliki sistem Anda. Pastikan Anda tidak memiliki proksi (mundur) atau CDN lain di depan yang dapat mempengaruhi hasil.
Steffen Ullrich
"Menonaktifkan semua cipher SSLv3 menghasilkan menonaktifkan cipher yang dapat digunakan dengan TLS1.0 dan TLS1.1 dan hanya menyisakan beberapa cipher yang baru diperkenalkan dengan TLS1.2 (jika server Anda mendukung TLS1.2)" Jadi, apa solusi yang tepat?
Rohn Adams
@RohnAdams: jika tujuannya adalah untuk menonaktifkan RC4 daripada bagian '! RC4' baik-baik saja. Masalahnya adalah overblocking dengan menggunakan tambahan '! SSLv3'. Adapun cipher yang berguna untuk digunakan lihat Mozilla Cipher Generator .
Steffen Ullrich
2

Qualys SSL labs tampaknya sangat sensitif terhadap host default dll. Periksa bahwa SEMUA HTTPS Anda VirtualHosts pada alamat IP menggunakan pengaturan yang sama persis (selain dari file sertifikat), saya memiliki masalah serupa di mana beberapa tes Qualys diuji terhadap VirtualHost yang ditargetkan dan beberapa tes tampaknya mengambil VirtualHost default. Vhost tertarget saya hanya memiliki satu cipher diaktifkan tetapi Qualys menemukan daftar yang jauh lebih besar dari vhost default.

Saya juga menemukan skrip yang terlihat lebih baik di sini yang memberikan informasi lebih menyeluruh tentang uji SSL.

Geoff
sumber
2

Hanya melihat melalui ini untuk salah satu situs saya. Atas dasar jawaban @ AbVog, saya menemukan bahwa arahan saya sebenarnya hanya di dalam vhost default. Ketika saya memindahkan arahan ke konteks global, semuanya baik.

Selain itu, saya juga menemukan https://cipherli.st/ yang memiliki daftar konfigurasi SSL yang bagus untuk banyak paket yang berbeda. Rekomendasi saat ini untuk apache sebagai berikut:

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)" 
boyvinall
sumber
0

Pada Fedora 25 saya dengan cipher Apache / 2.4.25 ditangani oleh kebijakan crypto (lihat / etc / cryptopolicies / backends). Pengaturan standar telah menonaktifkan sepenuhnya RC4, jadi tidak perlu merusak sandi di pengaturan Apache. Kecuali memastikan bahwa Anda menggunakan ssl.conf terbaru karena tidak diinstal secara default tetapi dibiarkan sebagai ssl.conf.rpmnew di direktori conf.d.

Untuk mengkonfigurasi SSL saya hanya perlu menentukan sertifikat, ServerName dan DocumentRoot. Untuk Squirrelmail itu.

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"
John Damm Sørensen
sumber