Apache'de TLS 1.1 ve 1.2 nasıl devre dışı bırakılır?


13

Mod_ssl ve OpenSSL v1.0.1 ile Apache 2.2.22 çalıştıran bir Ubuntu 12.04.2 LTS sunucum var.

Benim sankonlar konfigürasyonunda (her şey hangi ı beklediğiniz gibi davranacağını içinde), var SSLProtocololan çizgi -all +SSLv3.

Bu yapılandırma ile TLS 1.1 ve 1.2 etkinleştirilir ve doğru çalışır - bu yapılandırma bana göre sezgiseldir, çünkü bu yapılandırma dikkate alındığında yalnızca SSLv3'ün etkinleştirilmesini beklerim.

TLSv1'i gayet iyi şekilde etkinleştirebilir / devre dışı bırakabilirim -/+TSLv1ve beklendiği gibi çalışır. Ancak +/-TLSv1.1ve +/-TLSv1.2geçerli yapılandırma seçenekleri olmadığından, bunları bu şekilde devre dışı bırakamam.

Neden bunu yapmak isteyeyim - TLS etkin sunucular ile bazı buggy davranışı olan bir üçüncü taraf uygulaması (ki üzerinde hiçbir kontrol var) ile uğraşıyorum ve ileri gitmek için tamamen devre dışı bırakmanız gerekiyor.


meraktan - TSL'yi neden devre dışı bırakmak istediğinizi sorabilir miyim? topladığımdan, SSLv1 / 2 / 3'ten daha güvenli olması gerekiyordu, bu yüzden sadece v1.1'e değil, v1.1'e izin vermemenin nedenlerini hayal edebiliyorum (bu beni buraya getirdi) eski yazılımlarla uyumluluk sorunları dışında SSL lehine?
codeling

@codeling TLS ile ilgili hataları olan eski, üçüncü taraf yazılımlarla çalışma.
Kyle Lowry

Yanıtlar:


23

Bu böceğin ilgisini çekti (ve evet, onu yeniden üretebildim) En son kararlı sürümü için kaynak koduna baktım mod_sslve bir açıklama buldum. Benimle ayı, bu amatör-yığın-taşacak:

Ne zaman SSLProtocolayrıştırıldı, bir sonuçlanır charbu gibi bakarak bir şey:

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

Yeni bir sunucu bağlamı başlatıldığında, TÜM kullanılabilir protokoller etkinleştirilir ve yukarıdakiler char, hangi protokollerin devre dışı bırakılması gerektiğini belirlemek için bazı şık bitsel VE işlemleri kullanılarak incelenir . SSLv3'ün açıkça etkinleştirilen tek protokol olduğu durumda, diğer 3 tanesi devre dışı bırakılır.

OpenSSL, TLSv1.1 için bir protokol ayarını destekler, ancak SSLProtocolbu seçenekleri hesaba katmadığından, asla devre dışı bırakılmaz. OpenSSL v1.0.1, TLSv1.2 ile ilgili bilinen bazı sorunlara sahiptir, ancak destekleniyorsa TLSv1.1 ile aynı şey için geçerli; mod_ssl tarafından tanınmaz / kullanılmaz ve bu nedenle hiçbir zaman devre dışı bırakılmaz.

Mod_ssl için Kaynak Kodu Referansları:

SSLProtocolpkg.sslmod/ssl_engine_config.c
Yukarıdaki işlevde kullanılan seçenekler , satır 925'de ayrıştırılır. pkg.sslmod/mod_ssl.h
Tüm protokoller, satır 586'da etkinleştirilir; pkg.sslmod/ssl_engine_init.cbundan sonra, sonraki satırlarda belirli protokoller devre dışı bırakılır.

Nasıl devre dışı bırakılır?

Birkaç seçeneğiniz var:

  1. Aşağıdakileri içeren OpenSSL yapılandırma dosyasında devre dışı bırakın:
    Protocols All,-TLSv1.1,-TLSv1.2
  2. Yeniden yaz mod_ssl;-)

Mükemmel bir yanıt gibi görünüyor, sadece doğrulamanız gerekiyor: OpenSSL yapılandırma dosyası hangi / ne / nerede?
Kyle Lowry

openssl.cnf- konum kuruluma bağlıdır. Debian sıkmada /etc/ssl/openssl.cnf, OS X'te /System/Library/OpenSSL/openssl.cnfve Windows 7'de buldum %systemdrive%\openssl\openssl.cnf.
Mathias R. Jessen

1
Şimdi config dosyasına bakıyorum; sözdizimi cevabınıza göre beklediğimden biraz farklı görünüyor ve bu yapılandırma dosyasından etkinleştirilen / devre dışı bırakılan protokolleri kontrol edebileceğinizi açıkça belirten çevrimiçi bir şey bulamıyorum. Bunun için referansınız var mı? Teşekkürler.
Kyle Lowry

Başka bir seçenek - kullanın: SSLProtocolyukarıda aynı şekilde ( SSLProtocol All -TLSv1.1 -TLSv1.2(virgül gerekmez)), ancak genel veya belirli bir Apache yapılandırması altında, yukarıda belirtilen herhangi bir SSL genel yapılandırmasını 'geçersiz kılmak' için. (Temeldeki tüm SSL şifrelerini değiştirmek istemiyorsanız -> İhtiyacınız olan şifre zayıf olduğu kabul edilir.)
bshea


1

Her şeyden önce, sunucunuzdaki 443 numaralı bağlantı noktası (Apache tarafından yüklenen ilk SSL vhost) için varsayılan vhost'un ne olduğunu tanımlamalı ve yapılandırma dosyasını düzenlemelisiniz. Çoğu kullanıcının sunucularında ssl.conf dosyası bulunur ve orada 443 numaralı bağlantı noktası için bir vhost yapılandırılır. Bu dosyanın adı "s" ile başladığında, vhosts.conf dosyasında ("v" ile başlayan) yapılandırılan vhost'lardan önce yüklenir. Bu nedenle, durumunuzun bu olup olmadığını kontrol edin (yanıt hemen hemen herkes için "evet" tir) ve bu dosyadaki protokolleri değiştirin . Bu yeterli!

Benzer bir sorun burada yayınlanmıştır: Apache'de TLS 1.1 ve 1.2 nasıl devre dışı bırakılır? . HBruijn'e göre:

IP VirtualHost'larınız yoksa, uygulamada SSLProtocol yönergesinin ilk oluşumundan itibaren ayarlar tüm sunucu ve / veya TLS'yi destekleyen tüm ad tabanlı VirtualHost'lar için kullanılır

Ve bir başka burada: Tek bir VirtualHost (kaniş) için Apache'de bir SSLProtocol ayarlamak mümkün mü? . Vallismortis'e göre:

SSLProtocol'u yapılandırma dosyasındaki ilk VirtualHost için ayarlayabilirsiniz. Sonraki tüm VirtualHost girişleri bu ayarı ilk girişten devralır ve OpenSSL hatası nedeniyle kendi ayarlarını sessizce yok sayar.

Bu arada: belirli bir bağlantı noktası için sunucudaki varsayılan vhost, sunucu adı kimliği olmadan (veya yanlış sunucu adı ile) sunucuya ulaşan o bağlantı noktası için gelen istekleri yanıtlayan ondur. Örnek: Tarayıcınızın adres çubuğuna yazılan bir IP veya yanlış bir DNS tablosunun neden olduğu hatalı bir yönlendirme.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.