IIS ile aynı sunucudaki SNI ve joker karakterli SSL sertifikaları


12

IIS ve SSL ile ikinci düzey bir alanın (ör. Domain2.com, domain3.com) altında yaşayan birden çok web sitesi ile birlikte alt alan adlarını (ör. Sub.domain.com) dinlemesi gereken bir web sitesi barındırmak istiyorum.

Alt alan adlarına sahip web sitesi için bir joker karakter sertifikam (* .etkialanı.com) var ve ayrıca diğer siteler (domain2.com ve domain3.com) için de sertifikalarım var.

Böyle bir kurulum aynı IIS'de barındırılabilir mi (önemliyse, bir Azure Cloud Service web rolünde)?

Sorun tam olarak burada titobf açıkladı : teorik olarak bunun için SNI kullanarak bağlamalar, domain2 / 3.com için ana bilgisayar ve daha sonra * .domain.com için * host ile bir catch-all web sitesi gerekir. Ancak pratikte, tüm web sitesi açıksa, bağlamalar nasıl kurulursa kurulsun, domain2 / 3.com'a da tüm talepleri alacaktır (her ne kadar sadece son çare olarak eşleşse de).

Herhangi bir yardım mutluluk duyacağız.

Hâlâ çözülmemiş

Ne yazık ki bunu çözemedim: IIS ile internet (yani temelde bir güvenlik duvarı) arasında oturan ve (SSL el sıkışması gerçekleşmeden önce) gelen istekleri değiştiren bir yazılım oluşturmak gibi sadece son derece karmaşık şekillerde çözülebilir gibi görünüyor. ) izin verir. Yerel bir modülden bile ne olursa olsun, IIS ile mümkün olmadığından oldukça eminim.

Açıklığa kavuşturmak zorundayım: Azure Cloud Services kullanıyoruz, bu nedenle birden fazla IP adresi kullanamayacağımız konusunda başka bir kısıtlamamız var (bkz: http://feedback.azure.com/forums/169386-cloud-services-web-and -çalışan rolü / öneriler / 1259311-multiple-ssl-and-domain-to-one-app ). Sunucunuza birden çok IP'yi işaret edebiliyorsanız, IP'ler için de bağlayıcılar oluşturabileceğiniz için bu sorunla karşılaşmazsınız ve bunlar joker karakterli bağlayıcılarla birlikte çalışır. Daha spesifik olarak, joker site için bir IP'ye ihtiyacınız vardır (ancak şimdi ayrı bir IP'niz olduğundan joker ana bilgisayar adı bağlayıcısını yapılandırmanız gerekmez) ve diğer joker olmayanlar için başka bir IP.

Aslında geçici çözümümüz, standart olmayan bir SSL bağlantı noktası olan 8443'ün kullanılmasıydı. Bu nedenle SNI bağlaması aslında bu bağlantı noktasına bağlıdır, bu nedenle diğer bağlantılarla birlikte çalışır. Hoş değil, ancak web rolleri için birden fazla IP kullanabilene kadar bizim için kabul edilebilir bir geçici çözüm.

Şimdi çalışmayan bağlamalar

İlk https bağlaması basit bir sertifikaya sahip SNI, ikincisi bir joker karakter sertifikası olan SNI değil.

Http sitesi yanı sıra SNI https sitesi çalışır, ancak joker karakterli bağlayıcı bir "HTTP Hatası 503 verir. Hizmet kullanılamıyor." (daha fazla bilgi olmadan, Başarısız İstek İzleme veya Olay Günlüğü girişi yok). Bağlar

Sonunda temelde çalışıyor

Tobias'ın tanımladığı gibi ETW izleme günlüğünün etkinleştirilmesi, kök hatasının aşağıdaki gibi olduğunu gösterdi:

İstek (istek kimliği 0xF500000080000008) şu nedenle reddedildi: UrlGroupLookupFailed.

Bildiğim kadarıyla bu http.sys isteği kullanılabilir herhangi bir uç noktaya yönlendirmek mümkün olmadığı anlamına gelir.

Kayıtlı uç noktaların kontrol edilmesi, netsh http show urlacl443 numaralı bağlantı noktasına kaydedilmiş bir şeyin olduğunu gösterdi:

Reserved URL            : https://IP:443/
    User: NT AUTHORITY\NETWORK SERVICE
        Listen: Yes
        Delegate: No
        SDDL: D:(A;;GX;;;NS)

Bu Çıkarma netsh http delete urlacl url=https://IP:443/sonunda benim SSL bağlama etkin.


Bunu, birden çok IP'ye veya standart dışı bağlantı noktasına başvurmadan SNI kullanarak IIS'de yapabilmeniz gerekir.
Joe Sniderman

IIS'nin bunu desteklemesi mi demek istediniz? Katılıyorum :-).
Piedone

Sana tamamen katılıyorum, Piedone. IIS'nin (veya daha kesin olarak http.sys'nin) varsayılan SSL sertifikası olarak joker karakter sertifikası ile SNI BEKLENEN birden çok somut sertifika kombinasyonunu desteklemediğini gerçekten hayal kırıklığına uğrattım. Sorun 2012'den beri burada da görüldüğü gibi iyi bilinmektedir: forums.iis.net/t/1192170.aspx . Microsoft'a bir e-posta yazdım ve yakında geri bildirim almayı umuyorum.
Tobias J.

Teşekkürler Tobias. Microsoft yanıtladıktan sonra lütfen buraya gelin.
Piedone

2
Muhtemelen http.sys isteği reddediyor, bu nedenle IIS'de Hatalı İstek kaydedilmedi. Bir http.sys ETW izleme günlüğü oluşturun: 1) izleme günlüğünü başlatın. run: logman start httptrace -p Microsoft-Windows-HttpService 0xFFFF -o httptrace.etl -ets2) 503 isteğini yap 3) izleme kaydını durdur. run: logman stop httptrace -ets4) izleme günlüğünü dosyaya yaz. çalıştırın: tracerpt.exe httptrace.etl -of XML -o httptrace.xml5) xml dosyasında 503 nedenini kontrol edin ve buraya gönderin.
Tobias J.

Yanıtlar:


6

Barış haklı! IP: PORT bağlamasında yapılandırılan SSL sertifikası (örnek: 100.74.156.187:443) http.sys'de her zaman önceliklidir! Böylece çözüm aşağıdaki gibidir:

Joker karakter yedek sertifikanız için bir IP: 443 bağlaması yapılandırmayın, ancak bunun için bir *: 443 bağlaması (* "Tümü Atanmadı" anlamına gelir) yapılandırın .

Azure Cloud Service SSL uç noktasında joker sertifikanızı yapılandırdıysanız (benim gibi) Azure Cloud Service Çalışma Zamanı Modülü (IISconfigurator.exe) tarafından oluşturulan SSL bağlamasını IP: PORT yerine *: PORT olarak değiştirmeniz gerekir. Web rolüm OnStart aşağıdaki yöntemi çağırıyorum :

public static void UnbindDefaultSslBindingFromIp()
{
    Trace.TraceInformation(">> IISTenantManager: Unbind default SSL binding from IP");
    using (var serverManager = new Microsoft.Web.Administration.ServerManager())
    {
        try
        {
            var websiteName = string.Format("{0}_Web", Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.CurrentRoleInstance.Id);
            var site = serverManager.Sites[websiteName];
            var defaultSslBinding = site.Bindings.Single(b => b.IsIPPortHostBinding && b.Protocol == "https");
            defaultSslBinding.BindingInformation = string.Format("*:{0}:", defaultSslBinding.EndPoint.Port);
            serverManager.CommitChanges();
        }
        catch (Exception ex)
        {
            Trace.TraceError(ex.ToString());
        }
    }
}

Aşağıdaki ekran görüntüsü bulut hizmetimizin çalışan bir yapılandırmasını göstermektedir. Lütfen standart dışı bağlantı noktaları hakkında karıştırmayın. Ekran görüntüsü taklit bulut hizmetinden.

çalışan IIS yapılandırması

Bahsedilmesi gereken başka bir şey: HTTP (port 80) bağlaması, konuşlandırılan bulut hizmetinde yalnızca IP: PORT bağlamasıyla çalıştığı için tüm bağlamaları * olarak değiştirmeyin . Başka bir şey IP: 80'e bağlanır, bu nedenle *: 80 çalışmaz, çünkü * "tüm atanmamışlar" anlamına gelir ve IP zaten http.sys'de başka bir yere atanmıştır.


Ayrıntılı cevabınız için teşekkürler. Sorumu güncelledim: şimdi hatırladığım gibi muhtemelen bu kurulumla gitmedim çünkü şu andaki hatayı aldım.
Piedone

4

Tümünü yakalama bağlantınızın IP: Port türünde olmadığından emin olun. SNI gerekli değilken HTTPS bağlaması için bir IP: Bağlantı Noktası bağlaması mevcut olduğunda, bu bağlamanın her zaman önceliği olacaktır. Tümünü yakalama durumunuz için bir *: Port bağlama (* atanmamış olanıdır) kullanın.


Teşekkürler, ancak açıklamamda gördüğünüz gibi başlangıçta SNI bağlayıcısını bağlantı noktası olmadan kurmaya çalıştım, ancak bu işe yaramadığı için özel bir bağlantı noktası bağlamasıyla sonuçlandım.
Piedone

Port ile, IP demek istediğini anlıyorum. Bağlantı noktası olmadan bir bağlantınız olamaz. Inetmgr buna izin vermeyecektir. SNI bağlamaları için belirli bir IP veya "Atanmamış Tümü" kullanabilirsiniz ve sonuç aynı olacaktır. Belirli bir IP'de değil, "Tümü Atanmadı" durumunda olması gereken joker karakter sertifikanız olan Tümünü Yakala bağlamasıdır.
bariscaglar

Port demek istedim ama "standart dışı port" demek istedim. IP belirtilmedi, söylediğiniz gibi ve hala çalışmıyor, Tobias'ın bağlantısını da görün. IIS'nin bu sınırlaması üzerinde çalışmanın iki yolu vardır: diğer bağlantılardan farklı bir özel bağlantı noktası veya IP kullanın: Azure bulut hizmetlerinde bu bağlantı noktası kullanılamaz, bu nedenle özel bir bağlantı noktasına gittik.
Piedone

bariscaglar Microsoft IIS (IIS üzerinde çalışıyor) ile çok güzel ve yararlı bir görüşme yaptım! Teşekkürler Barış! Birlikte davranışı analiz ettik ve sonuca vardık, açıklanan davranış http.sys'nin istenen davranışıdır. Ama güzel bir çözüm var. Ayrıntılar için cevabıma bakın.
Tobias

Sadece okuyan herkes için bir not, son zamanlarda Uzak Masaüstü için bir hizmet yapılandırmak için Azure Portalı'nı kullanırsanız (veya sertifika yapılandırmasını başka bir şekilde değiştirirseniz) IP: Port bağlamanın otomatik olarak oluşturulmasına ve tüm SNI'nızın bozulmasına neden olabileceğini keşfettim. . Bu konuya bir çözümüm yok. RoleEnvironment.Changed sonra olur, bu yüzden WebRole.cs içinde yakalamak olamaz.
Mike

1

IIS, SNI'yi destekliyor, ancak portal aracılığıyla yapılandırmaya erişemeseniz de, masmavi bulut hizmeti web rollerinde bile ve dağıtımdan sonra kutuda yaparsanız, bir sonraki dağıtımınızla silinecektir. Çözüm yapılandırmayı otomatikleştirmektir. Ayrıntılar için buraya bir göz atın:

http://www.vic.ms/microsoft/windows-azure/multiples-ssl-certificates-on-windows-azure-cloud-services/


Teşekkürler, ancak açıkladığım gibi SNI'nin kendisi ile ilgili bir sorun yok (kullanıyorum), daha ziyade IIS'de joker ana bilgisayar adı eşleşmesinin nasıl çalıştığı.
Piedone

Bu makale artık mevcut değil, ancak burada Web Arşivi'nde bulunuyor: web.archive.org/web/20151020041907/http://www.vic.ms/microsoft/…
Mike
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.