Certyfikat SSL. Jak płacić za SSL mniej i zarządzać wieloma certyfikatami SSL jednocześnie

2 Mar 2020

Yaroslav Shatkevich
Yaroslav Shatkevich
Programista z 17-letnim doświadczeniem. Współzałożyciel i CTO The Story. Fascynat planowania prac programistycznych, autor licznych specyfikacji IT i DevOps. Wyróżniany przez Awwwards, nagrodzony iF Design Award 2018. Na co dzień pracuje w technologiach Python, PHP, React, JavaScript. Stworzył ponad 90 aplikacji webowych i mobilnych oraz systemów dedykowanych.

Co robić, jeśli nie chcesz płacić za certyfikat SSL 1300 zł? Co robić, jeśli takich certyfikatów potrzebujesz więcej? Postanowiliśmy, że skorzystamy z darmowych certyfikatów SSL, a zarządzanie wieloma certyfikatami usprawnimy za pomocą własnego narzędzia. Oszczędzamy kilkanaście tysięcy rocznie i zapewniamy użytkownikom wysoki poziom bezpieczeństwa.

Certyfikat SSL jest niczym strażnik, który broni dostępu do danych, które są przesyłane pomiędzy stroną a przeglądarką internetową. Dane z naszego serwera wędrują do użytkownika, lecz za pomocą certyfikatu SSL ich przesył jest szyfrowany. Dzięki temu chronimy naszych użytkowników przed niektórymi rodzajami ataków (man-in-the-middle, session hijacking itp.).

Rok 2018 przyniósł zmiany w całej sieci. Chrome, a za nim Firefox i Opera, zaczął wyraźnie sygnalizować, jeśli odwiedzana witryna nie została zabezpieczona.

Komunikat przeglądarki o braku certyfikatu SSL zabezpieczającego witrynę
Użytkownik otrzymuje ostrzeżenie w pasku adresu o braku certyfikatu SSL.

Ten komunikat oznacza, że właściciel serwisu internetowego nie zainstalował certyfikatu SSL. Gdyby tego było mało, serwisy internetowe bez zainstalowanego certyfikatu SSL są traktowane przez Google jako gorsze w wynikach wyszukiwań. Jednym słowem spada im widoczność w wyszukiwarce, a Chrome zniechęca użytkownika do wejścia na stronę.

Jedne firmy to zmusiło do zakupu certyfikatów SSL. Nas zmusiło do myślenia, jak sprostać wymaganiom giganta technologicznego, ale nie wydawać co roku fortuny.

Certyfikat SSL to niewielki plik na serwerze

W praktyce certyfikat SSL to niewielki plik, który umieszczamy na naszym serwerze. Składa się on z klucza prywatnego i publicznego, za pomocą których zapewniamy bezpieczeństwo komunikacji z witryną. Trzeba pamiętać, że nie jest to zabezpieczenie naszej strony, tylko zabezpieczenie połączenia pomiędzy stroną, a odwiedzającym ją użytkownikiem.

Ile kosztuje certyfikat SSL? Poza bezpłatnymi certyfikatami, mamy także takie, których cena waha się w granicach 100-1300 zł netto rocznie.

Ważność certyfikatu SSL bolączką firm i administratorów IT

Na początku zetknęliśmy się z poważnym problemem. W "Let’s Encrypt", z którego korzystamy do generowania darmowych SSL, certyfikat jest wydawany na okres maksymalnie trzech miesięcy.

Oznacza to, że po upływie trzech miesięcy musimy odnowić certyfikat, co stanowiło dla nas pewien problem. Opiekujemy się wieloma serwisami www różnych klientów, więc konieczne było pilnowanie dat wygaśnięcia certyfikatów. Możemy oczywiście próbować automatyzować odnawianie certyfikatów, ale nie zawsze jest to możliwe. Różnorodność infrastruktury klientów, restrykcje wymagań bezpieczeństwa dostępu, zróżnicowanie systemów operacyjnych oraz inne komplikacje operacyjne w niektórych przypadkach wymagały ręcznej aktualizacji certyfikatów.

Niedopilnowanie odnowienia certyfikatu prowdzi nie tylko do problemów z bezpieczeństwem, ale też jest poważną wpadką wizerunkową, a w przypadku serwisów aktywnie sprzedających niesie za sobą wymierne straty finansowe, gdyż każda przeglądarka skutecznie blokuje dostęp do witryny, której certyfikat wygasł (otwarcie strony jest dalej możliwe lecz karkołomne).

Komunikat przeglądarki o certyfikacie SSL, którego data ważności upłynęła.
Użytkownik otrzymuje wyraźny komunikat błędu w przeglądarce, jeżeli certyfikat SSL witryny wygasł.

Zadania cykliczne przypominające o wygasaniu certyfikatów na poszczególnych domenach? Monitorowanie notyfikacji przypominających o wygasaniu certyfikatów wysyłanych przez Let's encrypt? Możliwe ale potencjalnie prowadzące do błędów i mało profesjonalne. Szczególnie w przypadku setek domen, pieczę nad którymi sprawują różne zespoły, a często administratorzy klienta spoza naszej firmy.

Zaczęliśmy rozglądać się za dostępnymi usługami, które rozwiązują problem i są dostępne w modelu subskrypcji.

Szybko policzyliśmy, że przy dużej liczbie domen, koszt będzie spory. Poza tym logika działania tych narzędzi nie zawsze odpowiadała strukturze organizacyjnej naszej firmy bądź potrzebom klienta. No i byłby to kolejny SaaS na subskrypcję do kolekcji usług używanych przez dział IT. Wybraliśmy inną drogę.

Własne narzędzie do kontroli certyfikatów SSL

Napisaliśmy własne narzędzie, które przypominało nam o wygasających certyfikatach na domenach i witrynach zarządzanych przez The Story.

Zamiast bazować na ustawianiu przypomnień w kalendarzu czy na liście zadań, stworzyliśmy prostą aplikację, która regularnie odpytuje wszystkie nasze witryny i sprawdza datę wygaśnięcia certyfikatu SSL.

Jeżeli program wykryje wygasający certyfikat, to do osób zainteresowanych (DevOps, klient albo manager projektu) zostaje wysłana wiadomość e-mail z listą serwerów i domen, na których należy zaktualizować certyfikat SSL. Wiadomości będą wysyłane aż do skutku, czyli do momentu odnowienia certyfikatu lub wyłączenia monitoringu SSL dla wskazanej witryny.

Prosta metoda w Python, która zwraca ilość dni do wygaśnięcia certyfikatu domeny:

import datetime
import socket
import ssl
from ssl import CertificateError
​
def expire_in_days(self, domain_name):
	ssl_date_fmt = r'%b %d %H:%M:%S %Y %Z'
	now = datetime.datetime.now()
	context = ssl.create_default_context()
	expiration_days = 0
	conn = context.wrap_socket(socket.socket(socket.AF_INET), server_hostname=str(domain_name))
	conn.settimeout(3)
	try:
		conn.connect((self.domain, 443))
		ssl_info = conn.getpeercert()
		expiration_date = datetime.datetime.strptime(ssl_info['notAfter'], ssl_date_fmt)
		expiration_days = (expiration_date - now).days
	except IOError:
		pass
	except CertificateError:
		pass
	return expiration_days

Jak działa certyfikat SSL na przykładzie Let’s Encrypt

Jak działa Let's Encrypt? Uruchamiamy odpowiednie narzędzie na serwerze i otrzymujemy certyfikat Secure Socket Layer. Przechodzimy weryfikację, czy rzeczywiście jesteśmy właścicielami danej domeny (mamy do wyboru wiele metod weryfikacji i możemy dobrać odpowiednią dla każdego projektu). W efekcie otrzymujemy certyfikat, który zabezpiecza komunikację użytkownika z witryną.

Istnieją certyfikaty wyższego poziomu, które są droższe. Takie certyfikaty wymagają dodatkowej weryfikacji firmy, do której należy serwis. Ale w zamian dostajemy również polisę ubezpieczeniową. Ubezpieczycielem jest wydawca certyfikatu, który wypłaca użytkownikowi odszkodowanie, jeśli nasz serwis internetowy naraził użytkownika na straty.

Historia certyfikatów SSL sięga 1994 roku. To wtedy firma Netscape stworzyła protokół Secure Socket Layer, służący do bezpiecznej transmisji zaszyfrowanego strumienia danych. | Fot. pl.m.wikipedia.org

Własny serwis korporacyjny. Sprawdź!


SSL certyfikaty – dlaczego się opłacają

Jako programista zalecam instalację na każdej stronie certyfikatów SSL. Nie jest to skomplikowany proces, a na rynku dostępne są darmowe certyfikaty.

W przypadku serwisów transakcyjnych rekomenduję używanie płatnych certyfikatów (SSL EV/OV). Ze względu na zieloną kłódkę, która zwiększa wiarygodność serwisu www wśród użytkowników i bezpieczeństwo płatności (pamiętajcie o odszkodowaniu!).

W przypadku zarządzania domeną i subdomenami korzystniejszy będzie zakup certyfikatu SSL Wildcard. W ramach jednej opłaty otrzymujemy możliwość zabezpieczenia domeny głównej (np. certyfikaty.pl) i wszystkich jej subdomen – czyli adresów www, które mają inne znaki przed domeną główną, np. a.certyfikaty.pl, b.certyfikaty.pl.

Fot. główna: Richard Patterson  / Flickr.com / Bit.ly/2wiwQ9c / CC BY 2.0


Dzięki za lekturę! Zachęcamy do dzielenia się artykułem za pomocą poniższych przycisków.

Yaroslav Shatkevich
Yaroslav Shatkevich
Programista z 17-letnim doświadczeniem. Współzałożyciel i CTO The Story. Fascynat planowania prac programistycznych, autor licznych specyfikacji IT i DevOps. Wyróżniany przez Awwwards, nagrodzony iF Design Award 2018. Na co dzień pracuje w technologiach Python, PHP, React, JavaScript. Stworzył ponad 90 aplikacji webowych i mobilnych oraz systemów dedykowanych.

W serwisach internetowych jesteśmy jak Żywiec. Prawie robi wielką różnicę.