Bagaimana cara menonaktifkan TLS 1.1 & 1.2 di Apache?


13

Saya memiliki server Ubuntu 12.04.2 LTS yang menjalankan Apache 2.2.22 dengan mod_ssl dan OpenSSL v1.0.1.

Dalam konfigurasi vhosts saya (semua hal lain yang berperilaku seperti yang saya harapkan), saya memiliki SSLProtocolgaris dengannya -all +SSLv3.

Dengan konfigurasi itu, TLS 1.1 & 1.2 diaktifkan dan berfungsi dengan benar - yang merupakan kontra-intuitif bagi saya, seperti yang saya harapkan bahwa hanya SSLv3 yang akan diaktifkan mengingat konfigurasi itu.

Saya dapat mengaktifkan / menonaktifkan TLSv1 dengan baik -/+TSLv1, dan berfungsi seperti yang diharapkan. Tapi +/-TLSv1.1dan +/-TLSv1.2bukan opsi konfigurasi yang valid - jadi saya tidak bisa menonaktifkannya seperti itu.

Adapun mengapa saya ingin melakukan ini - saya sedang berurusan dengan aplikasi pihak ketiga (yang saya tidak punya kendali atas) yang memiliki beberapa perilaku buggy dengan server yang mengaktifkan TLS, dan saya harus menonaktifkan sepenuhnya untuk bergerak maju.


hanya ingin tahu - mungkin saya bertanya mengapa Anda ingin menonaktifkan TSL di tempat pertama? dari apa yang saya kumpulkan, seharusnya lebih aman daripada SSLv1 / 2/3, jadi saya hanya bisa membayangkan alasan ingin hanya mengizinkan v1.2 dan bukan v1.1 (itulah yang membawa saya ke sini), tetapi tidak untuk menonaktifkannya mendukung SSL, kecuali mungkin beberapa masalah kompatibilitas dengan perangkat lunak yang lebih lama?
codeling

@codeling Bekerja dengan perangkat lunak lama, pihak ketiga, yang memiliki bug dengan TLS.
Kyle Lowry

Jawaban:


23

Penasaran dengan bug ini (dan ya, saya sudah bisa mereproduksinya) Saya telah melihat kode sumber untuk versi stabil terbaru mod_ssldan menemukan penjelasan. Bersabarlah, ini akan membuat amatir-stack-overflowish:

Ketika SSLProtocoltelah diuraikan, hasilnya akan chartampak seperti ini:

0 1 0 0
^ ^ ^ ^
| | | SSLv1
| | SSLv2
| SSLv3
TLSv1

Setelah memulai konteks server baru, SEMUA protokol yang tersedia akan diaktifkan, dan yang di atas chardiperiksa menggunakan beberapa operasi DAN bitwise bagus untuk menentukan protokol apa yang harus dinonaktifkan . Dalam hal ini, di mana SSLv3 adalah satu-satunya protokol yang telah diaktifkan secara eksplisit, 3 lainnya akan dinonaktifkan.

OpenSSL mendukung pengaturan protokol untuk TLSv1.1, tetapi karena SSLProtocoltidak memperhitungkan opsi ini, ia tidak pernah dinonaktifkan. OpenSSL v1.0.1 memiliki beberapa masalah yang diketahui dengan TLSv1.2 tetapi jika didukung, saya kira hal yang sama berlaku untuk TLSv1.1; itu tidak dikenali / ditangani oleh mod_ssl dan karenanya tidak pernah dinonaktifkan.

Referensi Kode Sumber untuk mod_ssl:

SSLProtocolakan diuraikan pada baris 925 di pkg.sslmod/ssl_engine_config.c
Opsi yang digunakan dalam fungsi di atas didefinisikan pada baris 444 di pkg.sslmod/mod_ssl.h
Semua protokol akan diaktifkan di baris 586 di pkg.sslmod/ssl_engine_init.ckemudian protokol tertentu dinonaktifkan di baris berikutnya

Bagaimana cara menonaktifkannya?

Anda punya beberapa pilihan:

  1. Nonaktifkan di file konfigurasi OpenSSL dengan:
    Protocols All,-TLSv1.1,-TLSv1.2
  2. Menulis ulang mod_ssl;-)

Sepertinya jawaban yang sempurna, hanya perlu memverifikasi: mana / apa / di mana file konfigurasi OpenSSL?
Kyle Lowry

openssl.cnf- lokasi tergantung pada instalasi. Pada Debian memeras saya menemukannya di /etc/ssl/openssl.cnf, di OS X di /System/Library/OpenSSL/openssl.cnfdan di Windows 7 di %systemdrive%\openssl\openssl.cnf.
Mathias R. Jessen

1
Saya melihat file konfigurasi sekarang; sintaks terlihat sedikit berbeda dari apa yang saya harapkan berdasarkan jawaban Anda, dan sepertinya saya tidak dapat menemukan apa pun secara online yang menyatakan secara eksplisit Anda dapat mengontrol protokol yang diaktifkan / dinonaktifkan dari file konfigurasi itu. Apakah Anda punya referensi untuk itu? Terima kasih.
Kyle Lowry

Opsi lain - gunakan: SSLProtocoldengan cara yang sama di atas ( SSLProtocol All -TLSv1.1 -TLSv1.2(tidak perlu koma)) tetapi di bawah konfigurasi Apache global atau spesifik untuk 'menimpa' konfigurasi global SSL yang disebutkan di atas. (Jika Anda tidak ingin mengubah semua sandi SSL yang mendasarinya -> Karena sandi yang Anda butuhkan dianggap lemah.)
bshea


1

Pertama-tama, Anda harus mengidentifikasi apa vhost default untuk port 443 di server Anda (vhost SSL pertama yang dimuat oleh Apache) dan mengedit file konfigurasinya. Sebagian besar pengguna memiliki file ssl.conf di server mereka, dengan vhost untuk port 443 dikonfigurasi di sana. Ketika nama file ini dimulai dengan "s", itu akan dimuat sebelum vhosts dikonfigurasi di vhosts.conf (yang dimulai dengan "v"). Jadi, periksa apakah ini kasus Anda (jawabannya adalah "ya" untuk hampir semua orang) dan ubah protokol dalam file itu . Cukup!

Masalah serupa telah diposting di sini: Bagaimana cara menonaktifkan TLS 1.1 & 1.2 di Apache? . Menurut HBruijn:

Kecuali Anda memiliki IP VirtualHosts, dalam praktiknya pengaturan dari kemunculan pertama direktif SSLProtocol digunakan untuk seluruh server dan / atau semua VirtualHost berbasis nama yang mendukung TLS

Dan satu lagi di sini: Apakah mungkin untuk mengatur SSLProtocol di Apache untuk VirtualHost (pudel) tunggal? . Menurut vallismortis:

Anda dapat mengatur SSLProtocol hanya untuk VirtualHost pertama dalam file konfigurasi. Semua entri VirtualHost berikutnya akan mewarisi pengaturan itu dari entri pertama dan secara diam-diam mengabaikan pengaturan mereka sendiri karena bug OpenSSL.

Omong-omong: vhost default di server, untuk port yang diberikan, adalah vhost yang menjawab permintaan untuk port itu, yang tiba di server tanpa identifikasi nama server (atau dengan nama server yang salah). Contoh: IP yang diketik di bilah alamat browser Anda atau pengalihan yang salah yang disebabkan oleh tabel DNS yang salah.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.