Przyszedł taki dzień kiedy przyszedł klient i rzekł: „Chcę mieć SSL, JUŻ!!!”. Klient ma aplikację hostowaną w domenie mojej firmy, a urle wyglądają mniej więcej tak:
aplikacja1.apps.ohdev.net
aplikacja2.apps.ohdev.net
Napisałem do administratora serwera, a ten zażądał ode mnie CSR (Certificate Signing Request), który wygenerowałem dla domeny *.ohdev.net. Dlaczego symbol * jest przed nazwą domeny? Bo jest to certyfikat typu wildcard i pozwala zabezpieczyć wszystkie subdomeny w domenie ohdev.net.
Żądanie zostało opłacone u dostawcy usługi i zwrotnie dostałem zestaw plików do zaimportowania certyfikatu na serwerze. Robi się to w IIS na węźle głównym -> sekcja IIS -> Certyfikaty Serwera.
Certyfikat pomyślnie został zaimportowany, a na konkretnym site’ci dodałem powiązania (binding) dla protokołu https. Pojawił się tutaj problem, ponieważ nie byłem w stanie wpisać nazwy zwyczajowej dla powiązań https co dla powiązań http było możliwe. Z pomocą przyszedł internet i polecenie:
appcmd set site /site.name:"ohdev"
/bindings.[protocol='https',bindingInformation='*:443:'].bindingInformation:*:443:application1.apps.ohdev.pl
wykonane z poziomu folderu
C:\Windows\System32\inetsrv
Powinno zadziałać, ale nie zadziałało. Dlaczego? Bo wykupiony przeze mnie certyfikat obsługiwał tylko subdomeny pierwszego poziomu.
Należy zawsze sprawdzać czy certyfikat typu wildcard obsługuje domeny pierwszego i drugiego stopnia, czy może tylko pierwszego. Jeżeli pierwszego to niestety domeny:
aplikacja1.apps.ohdev.net
aplikacja2.apps.ohdev.net
nie będą obsługiwane przez mój certyfikat. Tylko domeny
aplikacja1.ohdev.net
aplikacja2.ohdev.net
Poradziłem sobie z tym wyrzucając poziom subdomeny apps i zadziałało.
Skoro już mam szyfrowaną stronę, a do tego jeszcze adres strony został zmieniony (wyrzucone apps) to chciałbym, aby wpisanie starych adresów jak i wpisanie nowego adresu zostało przekierowane przez IIS na nowy adres https://aplikacja1.ohdev.net. Tutaj wykorzystałem rewriting oferowany przez IIS, który możemy skonfigurować w web.configu.
<system.webServer>
<rewrite>
<rules>
<rule name="Redirections" patternSyntax="ECMAScript" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAny">
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
<add input="{HTTP_HOST}" pattern="^application1.apps.ohdev.pl$" />
</conditions>
<action type="Redirect" url="https://application1.ohdev.pl/{R:0}" />
</rule>
</rules>
</rewrite>
</system.webServer>
Należy pamiętać, aby dla application.ohdev.pl jak i application1.apps.ohdev.pl istniały powiązania (binding) dla danego website’a.