Tek bir VirtualHost (kaniş) için Apache'de bir SSLProtocol ayarlamak mümkün müdür?


13

Web sunucumda SSLv3'ü devre dışı bırakmayı içeren kaniş güvenlik açığı için bir yama test etmeye çalışıyorum . Bunu öncelikle üretim dışı bir ortamda test etmek için farklı bir test sunucusu için bir VirtualHost üzerinde SSLProtocol ayarlıyorum. Yapılandırmam şuna benzer:

<VirtualHost *:443>
    SSLEngine On
    SSLProtocol All -SSLv2 -SSLv3
    ServerName test.mysite.com
    # bunch of other stuff omitted
</VirtualHost>

Ancak apache yeniden başlatıldıktan sonra bile test sitemin hala savunmasız olduğu iddia ediliyor. Bunun çalışması bekleniyor mu? Küresel ssl yapılandırmasında ayarlamak zorundayım veya ayarın almamasına ve / veya çalışmamasına neden olan başka bir şey olup olmadığını merak ediyorum.

Yanıtlar:


16

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

Mod_ssl için karşılık gelen bir hata raporu var , ancak hata raporunda açıklandığı gibi, sorunun OpenSSL'de çözülmesi gerekiyor (sertifika devralındı, ancak protokoller değil).

Şifre takımları her VirtualHost için bağımsız olarak ayarlanmalıdır, aksi takdirde bir çok güvensiz şifre de dahil olmak üzere varsayılan liste ile karşılaşırsınız. Ayrıca, Sunucu Adı Göstergesini (SNI) desteklemeyen eski istemcilerin her zaman varsayılan ana bilgisayarı ( engellenmedikçeSSLStrictSNIVHostCheck ) kullanacağını unutmayın ; bu da testinizi bozabilir.

Kısacası, her sanal ana bilgisayar için özel şifre paketleri ve sertifikaları belirtebilirsiniz, ancak hata giderilene kadar her sanal ana bilgisayar için özel protokollerle doğru davranış beklemeyin.

Apache 2.4 ve modssl ile OpenSSL 1.0.1k ile bu sorunla karşılaştım ve Apache 2.2'nin aynı sorunlara maruz kalmasını bekliyorum.

Güncelleme (Ekim 2016): OpenSSL hatası 13 Ekim 2016'da çözüldü olarak işaretlendi. Ancak, açık sorunların toplu olarak kapatılmasının bir parçasıydı ve 'kısmi bir düzeltme' sağlansa da, sorun hiçbir zaman tam olarak çözülmedi.

Güncelleme (Nisan 2018): Yeniden gönderilen OpenSSL hatasının artık bir yaması var (9 Nisan 2018 itibariyle). Bu düzeltme eki, birden çok SNI sanal ana bilgisayarı ile yapılandırılmış Apache örneklerinin davranışını değiştirir:

Vhost SSLProtocol ile uyumlu olmayan bağlantıları reddet

Bu, 2.4.27 ile ve bu versiyon ile üretimde geliştirilmiş ve test edilmiştir. Yama 2.4.33 için değiştirildi ve hafifçe test edildi.

Bu, bağlantının sürümünü, SNI'ye dayalı olarak eşleşen sanal ana bilgisayar için yapılandırılan SSLProtocol ile karşılaştırır. Bağlantı, başlangıçta bağlantı noktası için varsayılan ana bilgisayar için yapılandırılmış SSLProtocol ile yapıldığından, varsayılan ana bilgisayarın herhangi bir sanal ana bilgisayar tarafından desteklenecek tüm protokolleri içermesi gerekir.

Bu yama, OpenSSL ile kayıtlı ssl_callback_ServerNameIndication geri aramasının ölümcül uyarı SSL_AD_PROTOCOL_VERSION döndürmesini sağlamak için init_vhost işlevine ek bir APR_EMISMATCH dönüş durumu ekler. Bu, ClientHello'ya, söz konusu sürümü içermeyen bir SSLProtocol belirtmesiyle aynı yanıtı üretmeyi amaçlamaktadır. SNI geri çağrısı ClientHello'nun işlenmesi sırasında ve bir yanıt üretilmeden önce çağrıldığı için, tam olarak bunu yapıyor gibi görünüyor.

Birdenbire aşağıdaki biçimde mesajlar görürseniz:

Rejecting version [version] for servername [hostname]

Ardından SSLProtocol, varsayılan ana makinenizi kontrol etmelisiniz .


@Anx tarafından eklenen ek bilgiler SSLStrictSNIVHostCheckçok takdir edilmektedir. Bununla birlikte, başka bir sanal ana bilgisayarda açık olarak ayarlanırsa , SNI habersiz istemcilerin bu belirli sanal ana bilgisayara erişmesine izin verilmediği belirtilen belgelere de dikkat edilmelidir .
vallismortis

5

Farklı bir IP dinliyorsa, her Vhost için farklı SSL protokollerine sahip olabilirsiniz.

TLSv1 ve diğerlerinin yalnızca TLSv1.1 ve TLSv1.2'ye izin veren belirli bir ana makineye ve yalnızca TLSv1.2'ye izin veren özel bir ana bilgisayara örnek:

<VirtualHost *:443>
  SSLEngine On
  SSLProtocol All -SSLv2 -SSLv3 -TLSv1
  ServerName test.mysite.com
  # bunch of other stuff omitted
</VirtualHost>

<VirtualHost 10.0.0.2:443>
  SSLEngine On
  SSLProtocol All -SSLv2 -SSLv3
  ServerName test2.mysite.com
</VirtualHost>

<VirtualHost 10.0.0.3:443>
  SSLEngine On
  SSLProtocol TLSv1.2
  ServerName test2.mysite.com
</VirtualHost>

Ayrıca, yalnızca sınama amacıyla gereksinim duyarsanız, başka bir IP yerine başka bir bağlantı noktası kullanabilirsiniz, örneğin ortak alternatif HTTPS bağlantı noktası 8443.
Esa Jokinen

0

Gerçekten de, sunucu adınızı (SNI) hayaletinizle birlikte kullanıyorsanız, birden fazla SSL sürümü tanımlayamazsınız.

Ancak, özel bir sunucu kullanıyorsanız, muhtemelen sunucunuza başka bir IP adresi ekleyebilirsiniz. Bu şekilde, IP başına farklı bir SSL sürümü kullanabileceksiniz. Vhost ayarlarınızı beklenen IP: 443 olarak değiştirmeniz yeterlidir.


-2

Veya şunları kullanabilirsiniz:

SSL Protokol TLSv1 TLSv1.1 TLSv1.2

Birçok sunucuda test edildi ve benim için çalışıyor! Sitenizi bu web sitesinde test edebilirsiniz


4
Bu SSLProtocol satırı yalnızca çalışıyor gibi görünüyor çünkü Apache şikayet etmiyor. Gerçekte, yalnızca ilk VirtualHost girişindeki SSLProtocol kullanılır.
vallismortis
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.