| Co to jest? | Jak to zrozumieć? |
|---|---|
| 1. Co to jest PKI? (Infrastruktura Klucza Publicznego) |
PKI (Public Key Infrastructure) to taki "cyfrowy system zaufania" w internecie. To zestaw zasad, technologii i instytucji, które razem pozwalają nam bezpiecznie komunikować się i wymieniać dane, wiedząc, że rozmawiamy z tym, z kim myślimy, że rozmawiamy. Analogia: Wyobraź sobie system paszportowy na całym świecie. PKI to jak ten system, który pozwala sprawdzić, czy paszport jest prawdziwy, czy został wydany przez uprawniony urząd i czy jego właściciel to faktycznie ta osoba, za którą się podaje. Dzięki temu możemy ufać, że osoba z paszportem jest tym, za kogo się podaje, nawet jeśli nigdy jej nie spotkaliśmy. W skrócie, PKI rozwiązuje problem: "Jak mogę ufać komuś, kogo nie znam, w świecie cyfrowym?". |
| 2. Co to jest Certyfikat Cyfrowy (SSL/TLS)? |
Certyfikat cyfrowy (często nazywany certyfikatem SSL lub TLS, choć TLS to nowsza technologia) to nic innego jak cyfrowy dowód tożsamości. Zawiera informacje o właścicielu (np. strona internetowa, serwer, osoba), jego klucz publiczny (o tym za chwilę) oraz cyfrowy podpis zaufanej instytucji (Urzędu Certyfikacji). Analogia: Certyfikat to jak Twój dowód osobisty lub paszport. Zawiera Twoje dane (imię, nazwisko, data urodzenia) i zdjęcie. Jest podpisany przez wiarygodną instytucję (urząd miasta/państwo), co potwierdza, że jest prawdziwy. Kiedy łączysz się ze stroną internetową z "kłódką", przeglądarka sprawdza jej certyfikat. Jeśli certyfikat jest ważny i podpisany przez zaufany urząd, przeglądarka wie, że strona jest tym, za co się podaje i może bezpiecznie nawiązać połączenie. |
| 3. Klucze Publiczne i Prywatne: Podstawa Bezpieczeństwa |
Certyfikaty opierają się na tzw. kryptografii klucza publicznego, gdzie każda "osoba" (serwer, użytkownik) ma parę kluczy:
Analogia: Klucz publiczny to otwarta kłódka, którą możesz dać każdemu. Ktoś zakłada tę kłódkę na swoją wiadomość, zamyka ją (szyfruje) i wysyła do Ciebie. Tylko Ty masz klucz prywatny, który pasuje do tej kłódki, więc tylko Ty możesz ją otworzyć (odszyfrować). A podpis? Gdy podpisujesz dokument (szyfrujesz go swoim kluczem prywatnym), każdy może użyć Twojego klucza publicznego, by sprawdzić, czy podpis jest prawdziwy i pochodzi od Ciebie. Jeśli klucz publiczny pasuje, to wiesz, że to na pewno Ty podpisałeś dokument i że nikt go nie zmienił po drodze. |
| 4. Urząd Certyfikacji (CA): Strażnik Zaufania |
Urząd Certyfikacji (Certificate Authority - CA) to instytucja, której ufasz, że sprawdzi tożsamość osoby/firmy i cyfrowo podpisze jej certyfikat. Przeglądarki internetowe i systemy operacyjne mają wbudowaną listę zaufanych CA (np. DigiCert, Let's Encrypt, Sectigo). Analogia: Urząd Certyfikacji to jak Urząd Miasta lub Ministerstwo Spraw Wewnętrznych, które wydaje dowody osobiste i paszporty. Ufasz im, że zweryfikowali Twoją tożsamość, zanim wystawili dokument. Podobnie, jeśli przeglądarka widzi certyfikat podpisany przez zaufane CA, wie, że może ufać stronie internetowej. Możesz też stworzyć własne CA (tzw. Self-Signed CA), ale wtedy tylko Ty (lub osoby, które celowo dodadzą Twoje CA do swoich "zaufanych" list) będziecie ufać certyfikatom wydanym przez Twoje CA. |
| 5. Rodzaje Certyfikatów (i do czego służą) |
|
| 6. Jak Stworzyć Własne Certyfikaty (Self-Signed) - OpenSSL |
Możesz tworzyć własne certyfikaty za darmo, np. za pomocą narzędzia OpenSSL. Takie certyfikaty nazywane są "self-signed" (samopodpisane) lub "wewnętrznymi". Są przydatne w środowiskach testowych, sieciach lokalnych lub tam, gdzie nie potrzebujesz zaufania publicznego (bo i tak tylko Ty będziesz ich używać, np. do uwierzytelnienia Ansible). Czego potrzebujesz: Zainstalowany OpenSSL (dostępny na Linuxie domyślnie, dla Windowsa znajdziesz instalator np. na Win32 OpenSSL). Pamiętaj: Domyślnie OpenSSL tworzy pliki w katalogu, w którym aktualnie się znajdujesz w wierszu poleceń. Stwórz sobie osobny katalog na swoje certyfikaty, np. `C:\MojeCertyfikaty` na Windowsie, lub `~/certyfikaty` na Linuxie, i pracuj tam. Krok 1: Wygeneruj Klucz Prywatny (dla Twojej strony/usługi)To Twój unikalny, tajny klucz. Nikt nie może go poznać. openssl genrsa -out server.key 2048 Wyjaśnienie: Tworzy nowy klucz prywatny (`server.key`) o długości 2048 bitów. To jak stworzenie własnego, prywatnego klucza do skrzynki pocztowej. Krok 2: Utwórz Żądanie Podpisania Certyfikatu (CSR)CSR (Certificate Signing Request) to plik, który zawiera Twoje publiczne dane (np. nazwę strony) i klucz publiczny. Wysyłasz go do Urzędu Certyfikacji, żeby go podpisali. openssl req -new -key server.key -out server.csr Podczas tworzenia CSR zostaniesz poproszony o podanie kilku informacji. Ważne jest Wyjaśnienie: Na podstawie klucza prywatnego (`server.key`) tworzy żądanie podpisania (`server.csr`). To jak wypełnienie wniosku o paszport, z Twoimi danymi i miejscem na pieczęć. Krok 3: Podpisz Własnoręcznie Certyfikat (Self-Signed)Jeśli nie masz własnego Urzędu Certyfikacji (CA) i nie chcesz kupować certyfikatu, możesz podpisać swój CSR własnym kluczem prywatnym. Taki certyfikat będzie działał, ale przeglądarki będą na niego narzekać, dopóki nie dodasz go do listy zaufanych. openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt Wyjaśnienie: Bierzemy żądanie podpisania (`server.csr`), podpisujemy je naszym własnym kluczem prywatnym (`server.key`), ustawiamy ważność na 365 dni i zapisujemy jako plik certyfikatu (`server.crt`). To jak samodzielne podpisanie swojego wniosku o paszport, bez pieczęci urzędu. Masz teraz dwa ważne pliki: |
| 7. Tworzenie Własnego Urzędu Certyfikacji (CA) i Podpisywanie Certyfikatów |
Jeśli chcesz mieć więcej kontroli nad certyfikatami w swojej sieci (np. dla wielu serwerów), możesz stworzyć własne CA. Wtedy Twoje CA będzie "podpisywać" certyfikaty dla innych serwerów/usług, a Ty (i Twoi użytkownicy) będziecie ufać tylko Twojemu CA. Krok 1: Utwórz Klucz Prywatny dla Twojego CATo jest główny, tajny klucz Twojego "urzędu". openssl genrsa -out ca.key 2048 Krok 2: Utwórz Certyfikat dla Twojego CA (Self-Signed CA)To jest "pieczęć" Twojego urzędu. Musisz go podpisać własnoręcznie, aby stał się samodzielnym CA. openssl req -new -x509 -days 3650 -key ca.key -out ca.crt Podaj informacje dla CA, np. Wyjaśnienie: Tworzymy samopodpisany certyfikat CA (`ca.crt`), ważny 10 lat, używając klucza prywatnego CA (`ca.key`). Krok 3: Użyj Swojego CA do Podpisania Żądania Certyfikatu (CSR)Teraz, gdy masz swoje CA, możesz podpisywać nim żądania certyfikatów dla innych serwerów (np. openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server_signed.crt -days 365 Wyjaśnienie: Podpisujemy żądanie (`server.csr`) za pomocą certyfikatu CA (`ca.crt`) i klucza prywatnego CA (`ca.key`). Wynikowy certyfikat (`server_signed.crt`) będzie zaufany, jeśli system lub przeglądarka ufa Twojemu CA (`ca.crt`). Gdzie zapisywane są te pliki? Domyślnie w katalogu, z którego uruchamiasz polecenia OpenSSL. Aby przeglądarka lub system ufały |
| 8. Przykład: Własne Certyfikaty dla Ansible (Uwierzytelnianie) |
Ansible często używa SSH do łączenia się z serwerami, ale czasami potrzebujesz certyfikatów do innych celów, np. do zabezpieczania API, serwisu webowego uruchomionego na kontrolerze Ansible, albo do uwierzytelniania wzajemnego (mutual TLS) między komponentami. Załóżmy, że chcesz zabezpieczyć panel webowy AWX/Ansible Tower lub połączyć się z jakimś API z Ansible, używając certyfikatów, które sam wydałeś. Krok 1: Przygotuj katalogi i pliki CAmkdir my_ansible_ca cd my_ansible_ca openssl genrsa -out ca_ansible.key 2048 openssl req -new -x509 -days 3650 -key ca_ansible.key -out ca_ansible.crt -subj "/CN=MyAnsibleCA" Wyjaśnienie: Tworzymy własne CA specjalnie dla Ansible. `ca_ansible.key` to klucz prywatny CA, `ca_ansible.crt` to certyfikat CA. `CN=MyAnsibleCA` to nazwa naszego CA. Krok 2: Wygeneruj klucz prywatny i CSR dla serwera/usługi AnsibleZałóżmy, że Twój serwer Ansible ma adres IP `192.168.1.50` lub nazwę `ansible.local`. openssl genrsa -out ansible_server.key 2048 openssl req -new -key ansible_server.key -out ansible_server.csr -subj "/CN=ansible.local" Jeśli potrzebujesz wielu nazw domen/IP w jednym certyfikacie (np. `ansible.local` i `192.168.1.50`), musisz użyć pliku konfiguracyjnego dla OpenSSL (np. `extfile.cnf`): # extfile.cnf [ req ] distinguished_name = req_distinguished_name req_extensions = v3_req [ req_distinguished_name ] countryName_default = PL stateOrProvinceName_default = Mazowieckie localityName_default = Warszawa organizationName_default = Moja Firma organizationalUnitName_default = IT commonName_default = ansible.local [ v3_req ] subjectAltName = @alt_names [ alt_names ] DNS.1 = ansible.local IP.1 = 192.168.1.50 A następnie użyj go do wygenerowania CSR: openssl req -new -key ansible_server.key -out ansible_server_multi.csr -config extfile.cnf Krok 3: Podpisz CSR za pomocą Twojego Ansible CAopenssl x509 -req -days 730 -in ansible_server.csr -CA ca_ansible.crt -CAkey ca_ansible.key -CAcreateserial -out ansible_server.crt Lub dla wersji z wieloma nazwami: openssl x509 -req -days 730 -in ansible_server_multi.csr -CA ca_ansible.crt -CAkey ca_ansible.key -CAcreateserial -out ansible_server_multi.crt -extensions v3_req -extfile extfile.cnf Wynik: Masz teraz pliki Krok 4: Skonfiguruj usługę/Ansible do używania certyfikatówDla serwera WWW/API (np. Nginx lub Apache hostujący jakiś panel Ansible): Musisz wskazać ścieżki do `ansible_server.key` i `ansible_server.crt` w konfiguracji serwera webowego (np. w pliku `nginx.conf` lub `httpd.conf`): # Przykład konfiguracji Nginx
server {
listen 443 ssl;
server_name ansible.local 192.168.1.50;
ssl_certificate /path/to/your/ansible_server.crt; # Tutaj wstaw ścieżkę do pliku .crt
ssl_certificate_key /path/to/your/ansible_server.key; # Tutaj wstaw ścieżkę do pliku .key
# Opcjonalnie, jeśli klienci też mają się uwierzytelniać certyfikatem
# ssl_client_certificate /path/to/your/ca_ansible.crt;
# ssl_verify_client on;
location / {
# ... konfiguracja Twojej aplikacji ...
}
}
Pamiętaj, aby pliki `.crt` i `.key` były dostępne dla serwera webowego i miały odpowiednie uprawnienia! Zazwyczaj umieszcza się je w bezpiecznych katalogach, np. `/etc/ssl/certs/` i `/etc/ssl/private/` na Linuxie, lub w dedykowanych katalogach w Windows Server. Dla klienta (np. przeglądarki lub skryptu Ansible łączącego się z API): Aby przeglądarka lub aplikacja kliencka ufała certyfikatowi `ansible_server.crt`, musisz zaimportować `ca_ansible.crt` (certyfikat Twojego CA) do magazynu zaufanych certyfikatów w systemie operacyjnym klienta.
Teraz, gdy będziesz łączyć się z `ansible.local` (lub `192.168.1.50`) za pomocą HTTPS, przeglądarka nie powinna pokazywać ostrzeżenia o niezaufanym połączeniu, ponieważ ufa CA, które podpisało certyfikat. Użycie w zadaniach Ansible (moduł `uri` do połączeń HTTPS): Jeśli Twoje zadanie Ansible łączy się z usługą HTTPS, która używa certyfikatu podpisanego przez Twoje wewnętrzne CA, możesz określić ścieżkę do certyfikatu CA: # Przykład taska Ansible
- name: Pobierz dane z wewnętrznego API
uri:
url: https://ansible.local/api/status
method: GET
validate_certs: yes
# Ścieżka do Twojego certyfikatu CA, aby Ansible mu zaufał
ca_path: /path/to/your/ca_ansible.crt # Tutaj wstaw ścieżkę do pliku ca_ansible.crt
register: api_response
Wyjaśnienie: Parametr `ca_path` mówi Ansible, gdzie znaleźć certyfikat CA, któremu powinien ufać podczas weryfikacji certyfikatu serwera API. Dzięki temu nie dostaniesz błędu o niezaufanym certyfikacie. |
Źródła i Dalsze Czytanie
- Infrastruktura Klucza Publicznego (PKI) - Wikipedia
- Transport Layer Security (TLS) - Wikipedia (wcześniej SSL)
- Kryptografia klucza publicznego - Wikipedia
- Oficjalna Dokumentacja OpenSSL
- Moduł URI w Ansible - Oficjalna Dokumentacja (sekcja `validate_certs` i `ca_path`)
- Jak działa Let's Encrypt (Przykład publicznego CA)
- Win32 OpenSSL - Instalator OpenSSL dla Windows
Brak komentarzy:
Prześlij komentarz