Generowanie certyfikatu SSL Self-Signed za pomocą pakietu OpenSSL
Jednym z założeń używania certyfikatów SSL jest uwierzytelnienie serwera przed klientem, innymi słowy - przedstawienie podmiotu zarządzającego maszyną, po to aby klient miał pewność że połączył się z właściwym serwerem. Takie certyfikaty są wydawane przez firmy trzecie, które są w stanie poświadczyć że witryna www.example.com należy do firmy Example Inc. Wydanie takiego certyfikatu może kosztować grube pieniądze w zależności od tego co dany certyfikat oferuje. Komercyjny certyfikat często wyświetla się w przeglądarce jako zielona kłódka przy adresie strony. W dziesiejszych czasach wystarczy dysponować domeną, aby móc posiadać "zieloną kłódkę" na swojej stronie. Takie certyfikaty wystawiane są przez Let's Encrypt i każdy, dosłonie każdy może sobie taki certyfikat wyrobić. A co jeśli nie posiadamy żadnej domeny i chcemy np. zabezpieczyć nasz serwer www, za pomocą certyfikatu SSL (protokołu HTTPS, certyfikat jest tylko narzędziem), którego zawsze pierwszorzędnym celem jest zabezpieczenie transmisji pomiędzy klientem a serwerem. Możemy:
- Użyć certyfikatu wbudowanego w serwer Apache, o ile używamy tego programu jako serwera WWW oraz mamy zaufanie do tego certyfikatu.
- Wygenerować własny certyfikat wraz parą kluczy RSA. Klucze są niezbędne do wygenerowania certyfikatu, których np długość możemy ustawić. Od długości klucza zależy bezpieczeństwo naszej transmisji.
Aby utworzyć swój własny certyfikat SSL wydajemy poniższe polecenie.
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt
Z względu na to gdzie chcemy ten certyfikat zapisać musimy wydać to polecenie z odpowiednimi uprawnieniami. req
oznacza że OpenSSL bedzie używać modułu do podpisu żądań certyfikatu schematu X.509 zapisanego w formacie PKCS#10, jest klasyczny moduł do obsługi certyfikatów wykorzystywanych przez HTTPS, -x509
spowoduje że wygenerowany certyfikat będzie miał strukturę schematu x509, a nie klasycznego certyfikatu, -nodes
wyłącza szyfrowanie klucza prywatnego, dzieki czemu nie będzie potrzebne hasło klucza podczas każdego restartu certyfikatu (niestety, klucz nie jest przez to zbyt bezpieczny). -days 365
ustala przez ile dni certyfikat będzie ważny. Wartością tej opcji może być wyłącznie dodatnia liczba całkowita. Wraz z certyfikatem generujemy potrzebną parę kluczy.
Za pomocą opcji -newkey
, tworzymy nową parę kluczy, jako wartośc dla tej opcji podajemy algorytm wykorzystywany do wygenerowania kluczy w tym przypadku jest rsa
po dwukropku (:) podana jest długość klucza tutaj 2048
bitów co jest standardem na dziesiejsze czasy, krótszych kluczy sam OpenSSL nie będzie chciał stworzyć. Opcja -keyout
wskazuje miejsce gdzie klucz ma zostać zapisany, a opcja -out
, wskazuje miejsce zapisu wygenerowanego certyfikatu. Te dwie scieżki należy zapisać będą potrzebne do wskazania plików certyfikatu w pliku konfiguracyjnym serwera WWW.
Kiedy wygenerowaliśmy i wdrożyliśmy nasz certyfikat przejdź do strony, którą nim zabezpieczyliśmy. Do wiemy się z infomacji zwróconych przez przeglądarkę że nasz nie jest godny zaufania, a kłódka będzie posiadać znak ostrzegawczy. Dlaczego tak się dzieje ? Każda przeglądarka posiada własną bazę zaufanych wystawców certyfikatów. Jeśli certyfikat jakim serwer operuje nie posiada znaczników, którego kolwiek z nich wtenczas wyświetli nam się taka informacja. Wystawcy certyfikatów zwani również urzędami certyfikacji, posiadają własne certyfikaty służące do podpisu wniosków certyfikacyjnych, na ich podstawie generowane są certyfikaty. Jest wielce prawdopobne że urzędy wykorzystują to samo oprogramowanie co my. Nic nie stoi na przeszkodzie aby utworzyć sobie swój własny urząd certyfikacyjny i podpisywać za jego pomocą swoje certyfikaty. Niestety nie jest tak kolorowo jakby się mogło wydawać. Aby przeglądarka traktowała nasze certyfikaty jako zaufane musi posiadać w swojej bazie certyfikat naszego urzędu certyfikacji. Możemy zaimportować taki certyfikat do naszego systemu, wtedy po wejściu na strona kłódka będzie zielona. Niestety kłódka będzie zielona tylko tam gdzie zaimpotowalśmy certyfikat naszego urzędu.
Obecnie rzadko zdarza się potrzeba wygenerowania tego typu certyfikatów. Ale jeśli zajdzie taka potrzeba to teraz wiadmo, możemy to zrobić za pomocą pojedyńczego polecenia.
~xf0r3m