Certyfikaty SSL i HTTPS web aplikacji

Protokół SSL (Secure Socket Layer) został zaprojektowany w celu zapewnienia bezpiecznej komunikacji pomiędzy urządzeniami. Dzięki niemu możliwe jest przesyłanie zaszyfrowanych danych wrażliwych, takich jak login czy hasło. Komunikacja realizowana jest za pomocą specjalnych certyfikatów bezpieczeństwa. Wspomniane certyfikaty SSL mogą zostać zakupione u wielu zewnętrznych usługodawców, ofert w internecie nie brakuje. Obecnie stosuje się już protokół TLS (Transport Layer Security), który jest rozwinięciem SSL, aczkolwiek częściej można spotkać się z tym drugim określeniem, dlatego nim dalej będę się posługiwał w tym artykule.

SSL wykorzystywany jest przy szyfrowaniu całej masy protokołów, w tym najbardziej znanego HTTP, dzięki czemu mamy do dyspozycji zaszyfrowany protokół HTTPS. Jak realizowany jest proces połączenia się z serwerem? Odwiedzamy interesującą nas stronę internetową. W tym momencie przeglądarka żąda certyfikatu SSL od serwera aplikacji. Żądany certyfikat zostaje przez stronę przesłany do przeglądarki, która od razu rozpoczyna proces weryfikacji certyfikatu. Jeśli weryfikacja zostanie zakończona powodzeniem sesja zostaje rozpoczęta.

Każdy z certyfikatów SSL składa się z pary kluczy szyfrujących oraz kilku informacji identyfikujących sam certyfikat. Danymi identyfikującymi mogą być np.: nazwa domeny, dla której certyfikat został wygenerowany, oraz nazwa firmy będącej bezpośrednim właścicielem certyfikatu. Tego typu certyfikaty SSL wydawane są przez zaufane urzędy certyfikujące CA (Trusted Certificate Authority). Współczesne przeglądarki mają zaimplementowaną listę wszystkich instytucji certyfikujących, dzięki czemu możliwa jest natychmiastowa weryfikacja otrzymanego certyfikatu. Jeśli nazwa właściciela nie będzie mogła być skojarzona z wbudowaną listą urzędów certyfikujących, użytkownik przeglądarki zostanie o tym fakcie natychmiast poinformowany. Mimo otrzymania niezaufanego certyfikatu SSL, użytkownik dalej jest w stanie, nawiązać połączenie z serwerem aplikacji – na własne ryzyko. Myślę, że sytuacja przedstawiona na poniższym zrzucie nie jest Ci obca:

Rozpoznanie niezaufanego certyfikatu SSL przez przeglądarkę
Rozpoznanie niezaufanego certyfikatu SSL przez przeglądarkę

Certyfikaty SSL – skąd je wziąć?

Certyfikat SSL można zakupić u dowolnego usługodawcy, w tym polskiego. Pierwsze trzy linki, jakie udało mi się  znaleźć w google to: nazwa.pl, certyfikatySSL, home.pl . Na potrzeby testów można pokusić się o wygenerowanie własnego certyfikatu (tzw. Self Signed Certificate). Warto zauważyć, że nie będzie to zaufany certyfikat i od razu zostanie to wychwycone przez każdą przeglądarkę internetową, ale na potrzeby testów samego podpięcia takiego certyfikatu do web aplikacji będzie to wystarczające. Do najbardziej popularnych sposób generowania certyfikatu należy certreq oraz OpenSSL.

Wygenerowanie certyfikatu za pomocą Certreq.exe

Na komputerze z systemem operacyjnym Windows powinieneś być w stanie uruchomić z konsoli polecenie certreq, dzięki któremu będzie można wygenerować prosty certyfikat SSL. Zaczniemy od przygotowania szablonu certyfikatu. Stwórz nowy plik tekstowy do którego wklej następujący szablon:

Następnie uruchom wierz poleceń (Command Line) z prawami administratora. Przejdź do miejsca w którym zapisałeś szablon certyfikatu, a następnie wykonaj:

Jeśli proces zakończył się sukcesem, w folderze pojawi się nowy plik z certyfikatem SSL. Certyfikat zostanie od razu zainstalowany. W celu weryfikacji instalacji certyfikatu możesz uruchomić aplikację Zarządzaj certyfikatami komputerów (Manage Computer Certificates), a następnie kliknij w folder Osobisty (Personal), a potem Certyfikaty (Certificates). Powinieneś zobaczyć wszystkie zainstalowane u siebie certyfikaty SSL, w tym swój. Klikając dwukrotnie na swój certyfikat można dostrzec, że jest on niezaufany:

Podgląd wygenerowane certyfikatu z pomocą Zarządcy Certyfikatów certlm oraz wszystkie zainstalowane certyfikaty SSL
Podgląd wygenerowane certyfikatu z pomocą Zarządcy Certyfikatów certlm oraz wszystkie zainstalowane certyfikaty SSL

Kliknij prawym przyciskiem myszy na certyfikat, wybierz Wszystkie zadania (All tasks), a następnie Eksportuj (Export). Zaznacz opcję Tak, eksportuj klucz prywatny (Export Private Key) wraz z wszystkimi właściwościami rozszerzonymi oraz z dołączeniem certyfikatów do ścieżki certyfikacji:

Kreator eksportu certyfikatów
Kreator eksportu certyfikatów

Na koniec ustawiamy jeszcze hasło do certyfikatu i zapisujemy jako plik *.pfx.

Dodanie certyfikatu do web aplikacji

Certyfikaty SSL można dodać tylko do aplikacji znajdujących się w planie Basic i wyższych. Każda z aplikacji webowych, znajdująca się wewnątrz chmury, z góry posiada certyfikat SSL. HTTPS dostępny jest dla wszystkich witryn kończących się domeną azurewebsites.net. Microsoft zaopatrzył się w certyfikat Wildcard, dzięki któremu możliwe jest zabezpieczenie dowolnej liczby subdomen w ramach jednego adresu internetowego.

Czym powinien charakteryzować się certyfikat SSL

Każdy certyfikat SSL, który ma zostać do web aplikacji powinien:

  • być podpisany przez zaufane instytucje certyfikujące CA (lub samemu, ale tylko w celach testowych),
  • zawierać prywatny klucz,
  • zostać wyeksportowany do pliku .pfx,
  • zawierać co najmniej 2048-bitowy klucz szyfrujący,
  • zostać wygenerowany dla określonej domeny (niestandardowej). W przypadku potrzebny zabezpieczenia wszystkich subdomen należy zapatrzyć się w certyfikat Wildcard.

Dodanie certyfikatu do web aplikacji za pośrednictwem portalu

Po wybraniu web aplikacji wybieramy w zakładkę Certyfikaty SSL (SSL certificates), a następnie klikamy w Przekaż certyfikat (Upload Certificate). Teraz wskaż plik z certyfikatem i wprowadź hasło, które podałeś podczas eksportu  certyfikatu do pliku *.pfx. Teraz trzeba powiązać certyfikat z hostem. Klikamy na Dodaj powiązanie (Add binding), a następnie wybierz interesującą Cię nazwę hosta, wgrany przed chwilą certyfikat oraz typ certyfikatu SSL. Do wyboru mamy IP SSL – hostowany jest tylko jeden certyfikat na IP, oraz SNI SSL (Server Name Indication), gdzie możliwe jest podpięcie kilku (do 5) certyfikatów, do jednego adresu IP. Ja wybieram SNI SSL. W przypadku IP SSL Azure przypisze nowy adres IP dla domeny – konieczna będzie aktualizacja rekordu adresu A przy konfiguracji DNS domeny.

Powiązanie certyfikatu SSL za pośrednictwem portalu Azure
Powiązanie certyfikatu SSL za pośrednictwem portalu Azure

Otwórz w przeglądarce adres swojej witryny z prefiksem https://. Powinieneś spotkać się z komunikatem, że połączenie nie jest prywatne, aczkolwiek czego można było się spodziewać po samodzielnie wygenerowanym certyfikacie 🙂

PowerShell

AzureCLI

Wymuszenie przekierowania HTTPS

Azure domyślnie nie wymusza przekierowania wszystkich żądań na HTTPS. Dalej jesteśmy w stanie dostanie się do niezabezpieczonej wersji aplikacji przez protokół HTTP. Aby wymusić używanie HTTPS’a należy uzupełnić plik web.config aplikacji o następującą regułę: