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 SSLProtocol
garis 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.1
dan +/-TLSv1.2
bukan 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.
Jawaban:
Penasaran dengan bug ini (dan ya, saya sudah bisa mereproduksinya) Saya telah melihat kode sumber untuk versi stabil terbaru
mod_ssl
dan menemukan penjelasan. Bersabarlah, ini akan membuat amatir-stack-overflowish:Ketika
SSLProtocol
telah diuraikan, hasilnya akanchar
tampak seperti ini:Setelah memulai konteks server baru, SEMUA protokol yang tersedia akan diaktifkan, dan yang di atas
char
diperiksa 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
SSLProtocol
tidak 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:
SSLProtocol
akan diuraikan pada baris 925 dipkg.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.c
kemudian protokol tertentu dinonaktifkan di baris berikutnyaBagaimana cara menonaktifkannya?
Anda punya beberapa pilihan:
Protocols All,-TLSv1.1,-TLSv1.2
mod_ssl
;-)sumber
openssl.cnf
- lokasi tergantung pada instalasi. Pada Debian memeras saya menemukannya di/etc/ssl/openssl.cnf
, di OS X di/System/Library/OpenSSL/openssl.cnf
dan di Windows 7 di%systemdrive%\openssl\openssl.cnf
.SSLProtocol
dengan 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.)Masalah ini juga dibahas di komentar di halaman mod_ssl Apache: http://httpd.apache.org/docs/2.2/mod/mod_ssl.html#comment_1136
Jika Ubuntu 12.04 memiliki Apache 2.2.23, masalah tidak akan terjadi. Menurut komentar, dimungkinkan untuk mengaktifkan TLSv1.1 dan TLSv1.2, tetapi TLSv1.0 kemudian diaktifkan juga:
sumber
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:
Dan satu lagi di sini: Apakah mungkin untuk mengatur SSLProtocol di Apache untuk VirtualHost (pudel) tunggal? . Menurut vallismortis:
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.
sumber