Podstawa wykładowa: Część 5 - slajdy 4, 5, 6, 7: infrastruktura klucza publicznego (PKI), rola urzędów CA i RA, certyfikat samopodpisany Root CA, struktura
X.509, TBSCertificate, rozszerzenie Basic Constraints.
Szacowany czas: ~60-80 min | trudność S/M | Artefakt: 1 plik/log/zrzut | Starter: LAB5_startery/root_ca.cnf i server_req.cnf
Cel
Celem zadania jest praktyczne zapoznanie się z architekturą prywatnego urzędu certyfikacji (Root CA) oraz strukturą samopodpisanego certyfikatu X.509. Student generuje parę
kluczy RSA, konfiguruje plik openssl.cnf, wystawia główny certyfikat urzędu z rozszerzeniem Basic Constraints oraz analizuje jego pola za pomocą narzędzi OpenSSL i CyberChef.
Scenariusz – opis
Infrastruktura klucza publicznego opiera się na hierarchii zaufania, której fundamentem jest nadrzędny urząd certyfikacji Root CA. W systemach produkcyjnych certyfikat urzędu
głównego znajduje się w zaufanym magazynie systemu operacyjnego lub przeglądarki internetowej. Podstawową cechą certyfikatu Root CA jest jego samopodpisanie, co oznacza, że tożsamość
wystawcy Issuer jest tożsama z podmiotem Subject. Klucz prywatny Root CA musi być otoczony najwyższą ochroną fizyczną i proceduralną, gdyż jego przejęcie unieważnia zaufanie do całej
gałęzi certyfikatów. W tym ćwiczeniu wcielasz się w rolę administratora bezpieczeństwa tworzącego wewnętrzne środowisko certyfikacji dla sieci uczelnianej. Konfiguracja urzędu
certyfikacji wymaga zdefiniowania specyficznych rozszerzeń standardu X.509 v3, w tym kluczowej flagi Basic Constraints o wartości CA:TRUE.
Co ma wykonać student / grupa
Pracę rozpoczynasz od uruchomienia emulatora JSLinux Alpine i utworzenia
dedykowanego katalogu roboczego o nazwie moj_root_ca. Generujesz silny klucz prywatny RSA o długości 4096 bitów za pomocą narzędzia openssl genpkey,
zabezpieczając go hasłem dostępu. Weryfikujesz obecność pliku klucza oraz sprawdzasz jego uprawnienia systemowe, dbając o zablokowanie dostępu dla innych użytkowników. Przygotowujesz
minimalistyczny plik konfiguracyjny openssl.cnf zawierający sekcję req z parametrami podmiotu oraz rozszerzeniami urzędu głównego.
W sekcji rozszerzeń ustawiasz basicConstraints na critical,CA:TRUE oraz keyUsage na critical,keyCertSign,cRLSign. Wykonujesz polecenie openssl
req z przełącznikiem -x509, generując samopodpisany certyfikat urzędu z 10-letnim okresem ważności.
Przykładowe kroki do wykonania jako sugestia
-
Otwórz w przeglądarce terminal JSLinux Alpine (
bellard.org/jslinux/vm.html?cpu=x86_64&url=alpine-x86_64.cfg&mem=256).
-
Utwórz katalog roboczy i przejdź do niego:
mkdir -p ~/ca_lab
&& cd ~/ca_lab.
-
Wygeneruj zabezpieczony hasłem klucz prywatny Root
CA:
openssl genpkey -algorithm RSA
-pkeyopt rsa_keygen_bits:4096 -aes256
-out rootCA.key.
-
Sprawdź uprawnienia wygenerowanego klucza i ustaw restrykcyjne prawa:
chmod 400
rootCA.key.
-
Utwórz plik konfiguracyjny
root_ca.cnf za pomocą polecenia
cat z sekcjami [req], [req_distinguished_name] oraz [v3_ca].
-
W sekcji [v3_ca] zdefiniuj wpisy:
basicConstraints = critical,
CA:TRUE oraz
keyUsage = critical, keyCertSign,
cRLSign.
-
Zdefiniuj identyfikator klucza:
subjectKeyIdentifier = hash oraz
authorityKeyIdentifier = keyid:always,issuer.
-
Wygeneruj samopodpisany certyfikat Root
CA: openssl
req -x509 -new -nodes -key
rootCA.key -sha256 -days 3650 -out
rootCA.crt -config root_ca.cnf -subj
'/C=PL/O=Uczelnia IT/CN=Uczelniany Root CA'.
-
Wyświetl pełną strukturę certyfikatu w konsoli:
openssl x509
-in rootCA.crt -text -noout.
- Wykonaj zrzut ekranu terminala z parametrami certyfikatu oraz widoku zdekodowanego certyfikatu w CyberChef.
Kontrola zaliczenia (checklist):
- Wykonano komendy OpenSSL i zachowano artefakt: rootCA.key (RSA-4096, chmod 400) + rootCA.crt (10 lat, CA:TRUE) + log openssl x509 -text.
- Dołączono 2–3 zrzuty z podpisami: generowanie klucza, certyfikat (Issuer=Subject) oraz dekod w CyberChef z widocznymi Basic Constraints/keyUsage.
- Opisano w 2–3 zdaniach wybór narzędzi (OpenSSL do CA, CyberChef do ASN.1) i rolę critical CA:TRUE + keyCertSign/cRLSign.
- Zapisano wnioski (3–5 zdań): samopodpisanie jako korzeń, ochrona klucza CA, odcisk SHA-256 jako tożsamość.
Wariant offline (fallback): Brak sieci/JSLinux: lokalny OpenSSL (Git-Bash/WSL) na plikach ze startera; crt.sh/BadSSL/jwt.io/MXToolbox zastąp opisem z cache i lokalnym openssl x509/s_client/dgst; dołącz pliki .crt/.key/.log i zrzuty.
Sugerowane wnioski i podsumowanie - co student ma osiągnąć
Sprawozdanie z realizacji zadania musi zawierać następujące kluczowe wnioski i osiągnięcia:
- Zrozumienie specyfiki certyfikatu samopodpisanego Root CA oraz tożsamości pól Issuer i Subject.
- Praktyczna znajomość roli rozszerzenia krytycznego Basic Constraints CA:TRUE w budowaniu hierarchii PKI.
- Umiejętność generowania kluczy RSA 4096-bit i zabezpieczania ich hasłem w środowisku OpenSSL.
- Weryfikacja integralności i tożsamości certyfikatu za pomocą skrótów kryptograficznych (odcisków palców SHA-256).