Ostatnio musiałem chwilę spędzić aby wygooglać jak skonfigurować SSL w dla IIS tak abym mógł lokalnie testować moje strony/serwisy korzystając z protokołu https. Czego szukałem: jak skonfigurować SSL w IIS7 tak abym mógł użyć podczas dewelopmentu adresu https://localhost/samplesite/sampleservice.svc do testowania i debugowania serwisu WFC.
Oto krótki opis krok po kroku jak skonfigurować SSL dla virtual directory w IIS7:
1. Generujemy certyfikat:
makecert -n "CN=localhost" -r -sv localhost.pvk localhost.cer
2. Dodajemy wygenerowany certyfikat do Trusted Root Certification Authorities dla Local Computer
3. Generujemy plik PFX komendą:
pvk2pfx.exe -pvk localhost.pvk -spc localhost.cer -pfx localhost.pfx -po XXXXX
XXXXX to nowe hasło do PFX, przy generowaniu należy podać zdefiniowane wcześniej hasło do certyfikatu wygenerowanego w #1.
4. Importujemy wygenerowany plik PFX do Server Certificates w IIS
Tak wygenerowany i zarejestrowany certyfikat wystarczy aby włączyć SSL dla website w IIS jednakże przeglądarka będzie ostrzegać przez nieznanym certyfikatem a próba dostępu do serwisu będzie generowała wyjątek: “Could not establish trust relationship for the SSL/TLS secure channel with authority 'NAZWA_KOMPUTERA'.”. Aby temu zaradzić należy wygenerować i ustawić w bindingu website certyfikat typu Self Signed, który będzie rozpoznawany jako w pełni akceptowany zarówno przez przeglądarkę jak i przez np. svcutil.
IIS7 umożliwia wygenerowanie certyfikatu typu Self Signed jednakże wygenerowany z IISa certyfikat ma jedną wadę – mimo że nasz certyfikat był wygenerowany dla CN=localhost wygenerowany za pomocą IIS certyfikat ma CN=NAZWA_KOMPUTERA co skutkuje kolejnym ostrzeżeniem przeglądarki gdy skorzystamy z adresu https://localhost/samplesite (gdy adres będzie w formie https://NAZWA_KOMPUTERA/samplesite przeglądarka nie pokazuje żadnych ostrzeżeń).
Rozwiązaniem tego problemu są kolejne kroki:
5. Generujemy certyfikat typu Self Signed używając SelfSSL (z IIS6 Resource Kit):
selfssl.exe /N:CN=localhost /S:1 /V:365
Parametr /S to ID website w IIS w którym chcemy zainstalować certyfikat, /V to liczba dni ważności certyfikatu (domyślnie 7).
6. Dodajemy wygenerowany certyfikat Self Signed do Trusted Root Certification Authorities dla Local Computer
7. Dodajemy do naszej strony w IIS binding dla HTTPS (domyślny port 443) i ustawiamy dla niego nasz Self Signed certyfikat.
8. Dla wybranego katalogu wirtualnego w SSL Settings zaznaczamy Require SSL.
Źródła z których korzystałem walcząc o SSLa na localhost ;) Zawierają bardziej szczegółowe opisy kolejnych kroków.