2015-02-03 21 views
12

Apache'yi aynı sunucu üzerinde bulunan farklı etki alanları için farklı ayrı SSL sertifikalarıyla kuruyorum (ve böylece aynı IP adresini paylaşıyorum).SNI olmayan tarayıcılar nasıl simüle edilir (SNI desteği olmadan)?

Qualys SSL Test ile SNI uzantısını desteklemeyen istemcilerin (yani, BingBot as of december 2013) olduğunu keşfettim.

Bu nedenle, bu tür istemcilerin isteklerini toplayabilen özel bir varsayılan web uygulaması oluşturmayı düşünüyorum, ancak bu istemcileri nasıl simüle edebilirim?

Windows 8'de, Linux kutularına erişimim yok, önemliyse.

cevap

1

Sen SNI desteklemeyen bir istemci simüle etmek için aşağıdaki komut dosyasını kullanın sonra Strawberry Perl yükleyip olabilir:

use strict; 
use warnings; 
use LWP::UserAgent; 

my $ua = LWP::UserAgent->new(ssl_opts => { 
    # this disables SNI 
    SSL_hostname => '', 
    # These disable certificate verification, so that we get a connection even 
    # if the certificate does not match the requested host or is invalid. 
    # Do not use in production code !!! 
    SSL_verify_mode => 0, 
    verify_hostname => 0, 
}); 

# request some data 
my $res = $ua->get('https://example.com'); 

# show headers 
# pseudo header Client-SSL-Cert-Subject gives information about the 
# peers certificate 
print $res->headers_as_string; 

# show response including header 
# print $res->as_string; 

Eğer SNI devre dışı bırakabilir boş bir dizeye SSL_hostname ayarlayarak, bu çizgiyi devre dışı SNI tekrar sağlar.

12

En sık kullanılan SSL kitaplığı olan OpenSSL'yi kullanabilirsiniz. Windows ikili dosyaları indirilebilir. İstemci tarafındaki SSL bağlantısını sınamak için çok iyi bir şekilde hizmet vermektedir. Varsayılan olarak SNI'yı desteklemez. SNI'yı etkinleştirmek için -servername domain.com argümanını ekleyebilirsiniz.

+0

bu durum geçerlidir cli gnutls-* ve öncedir. 1.1.1 * sürümünde, s_client "server_name" uzantısını varsayılan olarak gönderir ("-connect" parametresinde herhangi bir host belirtilmişse). Daha yeni sürümde "server_name" göndermek istemiyorsanız, "-noservername" ile kapatmanız gerekir. – Andrew

3

Özel varsayılan web uygulaması hakkında ... Bunu yapamazsınız.

Bunu yapamazsınız çünkü sınırlı istemciler sadece farklı bir sayfa açmazlar, ancak tamamen başarısız olurlar.

  1. SNI olmayan bir istemcinin yalnızca iyi açacağı bir "varsayılan" vhostunuz olduğunu düşünün. Ayrıca, bir SNI destekli istemci tarafından açık olması beklenen ek bir sankonuz da vardır.

  2. Açıkçası, bu ikisinin farklı sunucu adları olmalıdır (örneğin, default.example.com ve www.example.com), ancak Apache veya nginx hangi sitenin hangi bağlantı sunucusuna gösterileceğini bilmez. olmayan bir SNI istemci https://www.example.com açmaya çalışırsa

Şimdi, o ona bir sertifika hatası verecekti default.example.com sertifika, sunulan olacak. Bu büyük bir uyarı.

Bu hatanın düzeltmesi, hem www.example.com hem de default.example.com öğelerini içeren bir SAN (çok etki alanı) sertifikası yapmaktır. Sonra, bir SNI olmayan istemci https://www.example.com açmaya çalışırsa, geçerli bir sertifika ile sunulacak, ancak o zaman bile Host: başlığı www.example.com işaret edecek ve isteği default.example.com değil www.example.com için yönlendirilir.

Gördüğünüz gibi, SNI olmayan istemcileri tamamen engeller ya da bunları beklenen bir sanal alana yönlendirirsiniz. Varsayılan web uygulaması için mantıklı bir seçenek yok.openssl s_client benzer

1

openssl bültenleri 1.1.0 için

gnutls-cli --disable-sni www.google.com 
İlgili konular