Chciałbym hostować stronę internetową, która powinna słuchać subdomen (np. Sub.domain.com) wraz z wieloma stronami internetowymi, które żyją tuż pod domeną drugiego poziomu (np. Domain2.com, domain3.com) z IIS i SSL.
W przypadku witryny z poddomenami mam certyfikat wieloznaczny (* .domain.com), a także certyfikaty specjalnie dla innych witryn (domain2.com i domain3.com).
Czy taka konfiguracja może być hostowana na tym samym IIS (jeśli to ma znaczenie, w roli sieciowej Azure Cloud Service)?
Problem polega dokładnie na tym, co wyjaśnił titobf : teoretycznie do tego potrzebowalibyśmy powiązań za pomocą SNI, z hostem określonym dla domain2 / 3.com, a następnie witryną typu catch-all z * host dla * .domain.com. Ale w praktyce, bez względu na to, jak skonfigurowane są powiązania, jeśli witryna catch-all znajduje się na niej, otrzyma ona również wszystkie żądania do domain2 / 3.com (choć podobno jest ona dopasowana tylko w ostateczności).
Każda pomoc będzie mile widziana.
Wciąż nierozwiązane
Niestety nie byłem w stanie rozwiązać tego problemu: wydaje się, że można go rozwiązać tylko w bardzo skomplikowany sposób, na przykład tworząc oprogramowanie, które znajduje się między IIS a Internetem (czyli w zasadzie zaporą ogniową) i modyfikuje przychodzące żądania (zanim nastąpi uzgadnianie SSL! ), aby umożliwić scenariusz. Jestem całkiem pewien, że nie jest to możliwe w IIS, bez względu na wszystko, nawet z natywnego modułu.
Muszę wyjaśnić: korzystamy z usług Azure Cloud Services, więc mamy dodatkowe ograniczenie, że nie możemy używać wielu adresów IP (patrz: http://feedback.azure.com/forums/169386-cloud-services-web-and -worker-role / sugestie / 1259311-multiple-ssl-and-domains-to-one-app ). Jeśli możesz wskazać wiele adresów IP na serwerze, nie masz tego problemu, ponieważ możesz także tworzyć powiązania dla adresów IP, które będą ze sobą współdziałać. Mówiąc dokładniej, potrzebujesz adresu IP dla strony z symbolami wieloznacznymi (ale ponieważ masz teraz osobny adres IP, nie musisz konfigurować wiązania nazwy hosta z symbolami wieloznacznymi) i innego adresu IP dla wszystkich tych, które nie są symbolami wieloznacznymi.
W rzeczywistości naszym obejściem było użycie niestandardowego portu SSL, 8443. Tak więc powiązanie SNI jest faktycznie powiązane z tym portem, a zatem działa razem z innymi powiązaniami. Nie jest to przyjemne, ale akceptowalne obejście dla nas, dopóki nie możesz używać wielu adresów IP do ról internetowych.
Niedziałające wiązania teraz
Pierwsze wiązanie https to SNI z prostym certyfikatem, drugie to nie SNI, z certyfikatem wieloznacznym.
Witryna http działa, podobnie jak witryna SNI https, ale strona z powiązaniem ze znakiem wieloznacznym podaje „Błąd HTTP 503. Usługa jest niedostępna”. (bez dalszych informacji, brak śledzenia nieudanego żądania lub wpisu do dziennika zdarzeń).
Nareszcie to działa
Włączenie dziennika śledzenia ETW, tak jak opisano Tobiasza, pokazało, że błąd root był następujący:
Żądanie (identyfikator żądania 0xF500000080000008) odrzucone z powodu przyczyny: UrlGroupLookupFailed.
O ile rozumiem, oznacza to, że http.sys nie jest w stanie skierować żądania do żadnego dostępnego punktu końcowego.
Sprawdzanie zarejestrowanych punktów końcowych za pomocą netsh http show urlacl
pokazało, że rzeczywiście zarejestrowano coś dla portu 443:
Reserved URL : https://IP:443/
User: NT AUTHORITY\NETWORK SERVICE
Listen: Yes
Delegate: No
SDDL: D:(A;;GX;;;NS)
Usunięcie tego z netsh http delete urlacl url=https://IP:443/
wreszcie włączyło moje wiązanie SSL.
logman start httptrace -p Microsoft-Windows-HttpService 0xFFFF -o httptrace.etl -ets
2) wykonaj żądanie 503 3) zatrzymaj dziennik śledzenia. uruchom: logman stop httptrace -ets
4) zapisz dziennik śledzenia do pliku. uruchom: tracerpt.exe httptrace.etl -of XML -o httptrace.xml
5) sprawdź przyczynę 503 w pliku xml i opublikuj ją tutaj.