To trzeci post dotyczący małego pakietu PKI GPG i wersji Gnu4Win. Opiszę tutaj tematy związane z certyfikatami klucza publicznego oraz niewielki program do ich obsługi a mianowicie Kleopatra z pakietu Gnu4Win.
Program zawarty jest w pakiecie Gnu4Win i służy do tworzenia i obsługi certyfikatów klucza publicznego PGP, generowania żądań certyfikatu X.509 i ich obsługi. Jak można zauważyć na poniższej ilustracji jeśli w systemie stworzymy (za pomocą GPA) parę kluczy prywatny-publiczny automatycznie tworzony jest odpowiadający certyfikat PGP, który można zobaczyć z programie Kleopatra.
Przejrzyjmy zatem możliwości Kleopatry, ruszamy więc z pustym kontem gdzie nie posiadamy ani pary kluczy ani żadnego certyfikatu. Zakładka My Certificates przechowuje moje prywatne certyfikaty, Trusted Certificates certyfikaty przeze mnie zaufane, Other inne certyfikaty a Imported to certyfikaty zaimportowane z pliku czy serwera certyfikatów.
Menu File pozwala na:
– tworzenie nowego certyfikatu osobistego
– poszukiwanie i import certyfikatu z serwerów publicznych
– eksport certyfikatów do pliku, serwera oraz eksport klucza prywatnego
– szyfrowanie, podpisywanie i odwrotne operacje
– obsługę sum kontrolnych
Spróbujemy teraz utworzyć nowy certyfikat osobisty (mamy otwarte dwa programy Kleopatrę i GPA aby widzieć co się będzie działo). Klikamy w File / New Certificate i pojawia sie okno tworzenia certyfikatu. Mamy tu do wyboru tworzenie certyfikatu PGP lub żądania certyfikatu X.509. Na początek zajmiemy się certyfikatami PGP.
Tworzenie certyfikatu OpenPGP
Menu File / New Certificate, klikamy w pierwszą opcję Create a personal OpenPGP key pair:
Kolejne okno wypełniamy zgodnie z potrzebami:
Jeśli chcemy konfigurować dodatkowe ustawienie certyfikatu można kliknąć w Advanced settings:
W tym oknie można wybrać rodzaj algorytmu (domyślnie możemy zostawić RSA z kluczem o długości 2048 bitów), oraz zastosowania samego certyfikatu:
– Signing dla operacji podpisu elektronicznego
– Encryption dla szyfrowania danych
– Certification dla certyfikacji np innych certyfikatów
– Authentication dla operacji uwierzytelniania
– Valid until to data ważności certyfikatu po przekroczeniu której staje się on bezużyteczny (jak i klucze z nim związane)
Ponieważ często używa się różnych certyfikatów dla różnych celów (np. inny dla podpisu a inny dla szyfrowania) dla tego mamy tu możliwośc wygenerowania ich większej ilości z różnym przeznaczeniem. To przeznaczenie certyfikatów może być wymagane w zależności od firm, systemów czy osób z jakimi będziemy prowadzić komunikację przy uzyciu naszych certyfikatów. Rozdział ról certyfikatów może być zależy od przyjętej polityki bezpieczeństwa i może wymagać innego certyfikatu do podpisu a innego do szyfrowania a jeszcze innego do uwierzytelniania. Przykładowo certyfikat dla uwierzytelniania może być związany z kartą SmartCard, certyfikat dla szyfrowania może być związany z programem GPA a operację podpisu mogą używać jeszcze innej metody z którą będzie związany certyfikat podpisujący. Zatwierdzamy więc wartości domyślne i kontynuujemy klikając w następnym oknie Create Key. W trakcie następnej operacji jaka jest tworzenie pary kluczy można w konie jakie się pojawi wpisywać dowolny tekst, poruszać nim po ekranie lub uruchomić program intensywnie korzystający z dysku gdyż program generatora zbiera dane „losowe” z naszego komputera celem podania ich do algorytmu tworzenia kluczy. Wpisany w oknie tekst nie będzie użyty w generowanych kluczach. O ciekawych sprawach związanych z losowością danych można poczytać w bardzo dobrej książce „Cisza w sieci” autorstwa Michała Zalewskiego. Kolejny etap to wprowadzenie hasła dla klucza prywatnego – staraj się aby hasło było możliwie trudne, zawierało min 10 znaków wraz ze znakami z poza alfabetu. Po utworzeniu certyfikatu a wraz z nim pary kluczy pojawia się potwierdzenie:
Mamy tu możliwość utworzenia pliku archiwum obu kluczy (prywatny i publiczny), wysłania certyfikatu na podany e-mail lub przesłania go do serwera certyfikatów o czym będzie nieco dalej, tu jednak nadmienię aby nie używać bezcelowo czy tylko w celu testu tej opcji gdyż raz posłany certyfikat zostanie tam na zawsze ponieważ jest prawie niemożliwe skasowanie go. Klikamy w Finish (kopie będziemy robić pózniej) i kończymy proces tworzenie nowego certyfikatu.
Spoglądając teraz do zakładek My Cerfificates oraz Trusted Certificates widzimy iż pojawił się tam wpis naszego nowego certyfikatu. Spójrzmy też do programu GPA – tam również pojawił się wpis z tym, że jest to tylko nowy klucz publiczny związany z utworzonym przed chwilą certyfikatem o czym świadczy pole Key-ID:
Powróćmy teraz do Kleopatry i sprawdzmy zawartość naszego certyfikatu (klikamy dwa razy na jego wpisie):
Zakładka Overview podaje najważniejsze informacje:
– User-ID dane o właścicielu certyfikatu (to co było wpisane przy jego tworzeniu)
– Validity termin ważności od do
– Type algorytm i długość klucza
– Usage przeznaczenie (omówione wyżej)
– Key-ID ID klucza
– Fingerprint odcisk palca certyfikatu
– Ownertrust zaufanie do certyfikatu (o nim będzie nieco dalej)
– Stored miejsce przechowania (komputer, SmartCard czy coś innego)
Jak widać mamy tu możliwość zmiany hasła do klucza prywatnego oraz daty ważności. Kolejna zakładka User-ID and Certifications przedstawia powiązania naszego certyfikatu z innymi, które mogły go obdarzyć zaufaniem a lista taka pojawia się po naciśnięciu Load certifications. O wzajemnej certyfikacji będzie nieco dalej.
Tworzenie żądania certyfikatu X.509
Certyfikaty X.509 to standard przemysłowy opisany w wielu dokumentach a podstawowe informacje znajdziesz na Wikipedii, w dokumencie RFC2459 oraz na wielu inny stronach internetowych. Tworzenie żądania certyfikatu X.509 rozpoczynamy z menu Files / New Cerificate a następnie wybieramy drugą pozycję Create a personal X.509..., w następnym oknie mamy już trochę więcej wpisywania:
W powyższym oknie należy wprowadzić dane w, które służą do utworzenia ścieżki nazewniczej zwanej Nazwa Wyróżniająca w skrócie DN (ang. Distinguished Names). O sposobie budowy DN możesz poczytać na wielu stronach www na przykład w serwisie WebSphere czy na Wikipedii oraz w książkach takich jak K. Kocis Administracja MS Active Directory Helion 2002 lub S. Reimer, M. Mulcare Active Directory dla MS Windows Server 2003 Promise 2005. Jest to kolejny standard w świecie informatyki i dobrze się jest z nim zapoznać jeśli chce się na poważnie zajmować certyfikatami X.509 (i nie tylko).
– CN nazwa użytkownika
– email adres poczty
– L Twoja lokalizacja np. miasto (możesz zostawić puste)
– OU jednostka organizacyjna np wydział firmy(możesz zostawić puste)
– O nazwa organizacji
– C kod kraju z normą ISO
To w sumie wszystko, klikamy w Next i wprowadzamy hasło dla klucza prywatnego, po chwili żądanie certyfikatu jest gotowe.
Wygenerowana została para kluczy oraz żądanie certyfikatu X.509. Teraz możemy zakończyć lub od razu wygenerować plik żądania certyfikatu celem pózniejszego posłania do centrum certyfikacji. Klikamy więc w „Save…” i zapisujemy żądanie certyfikatu do pliku. Zauważmy, iż taki plik ma rozszerzenie *.p10 co jest standardem. Zapisany plik jest plikiem binarnym, który może zostać przesłany do centrum certyfikacyjnego CA co opisane będzie w innym poście.
Obsługa certyfikatów
W poprzednich postach dotyczących szyfrowania współpracowaliśmy z Jankiem i Helgą – kontynuujmy zatem to dzieło 🙂 Na maszynie wirtualnej, będącej „komputerem” Janka tworzymy jego certyfikat osobisty i zapisujemy do pliku, który przesyłamy na drugą maszynę – „komputer” Helgi. Na jej komputerze także tworzymy dla niej certyfikat osobisty. Wszystko w podany wyżej sposób. Teraz kilka sposobów obsługi certyfikatów.
– Export Certificates pozwala wyeksportować certyfikat do pliku
– Export Secret Keys eksportuje do pliku parę kluczy związanych z certyfikatem
– Export Certificates to Server eksportuje certyfikat do publicznego serwera
– Certify Certificate pozwala dany (zaznaczony) certyfikat certyfikować naszym certyfikatem
– Change Expiry Dart umożliwia zmianę daty ważności certyfikatu
– Change Passphrase zmiana hasła klucza prywatnego związanego c ceryfikatem
– Add User-ID dodaje do certyfikatu nowego użytkownika np w celu dodania innego adresu
– Import Certificate umożliwia import certyfikatu z pliku lub serwera
Na początek zabawy zwróćmy jeszcze uwagę na wpisy w programie GPA – po utworzeniu certyfikatu Helgi jest tam tylko jej klucz publiczny, natomiast komplet przechowywany jest przez Kleopatrę w powiązaniu z certyfikatem Helgi. Zajmiemy się tym nieco pózniej.
Eksport certyfikatu do pliku
Klikamy prawym w certyfikat Helgi i wybieramy Export certificates. Zauważ, że program proponuje nazwę pliku z certyfikatem, która jest zgodna z odciskiem palca togo konkretnego certyfikatu a ostatnie osiem znaków jest zgodnych z ID pary kluczy związanych z nim. Plik zapisujemy w dowolnym katalogu. Wyeksportuj teraz certyfikat Helgi za chwilę będziemy go importować. Wygenerowany plik certyfikatu jest plikiem ASCII:
Eksport pary kluczy związanych z certyfikatem
Zaznaczmy certyfikat i prawym, następnie menu Export Secret Keys, w oknie jakie się pojawi podajemy katalog docelowy oraz nazwę pliku z kluczami – może być w postaci ID klucza. Jeśli zaznaczysz opcję ASCI Armor wygenerowany zostanie plik ASCII (jak miało to miejsce w przypadku eksportu kluczy opisanych w innym poście). Wyeksportuj teraz klucze Helgi będą za chwile potrzebne.
Eksport certyfikatu do serwera
Certyfikaty możemy upubliczniać tym samym pozwalając na ich używanie wielu osobom. W tym celu zaznaczamy certyfikat i wybieramy opcję Export Certificates to Server. Pamiętaj iż nie należy bawić się w tym przypadku bo raz wysłany certyfikat zawsze już będzie w sieci. Aby skonfigurować listę serwerów do jakich posyłamy certyfikaty mamy opcję Settings / Configure Cleopatra:
Możesz skonfigurować więcej serwerów z podziałem na rodzaj eksportowanego certyfikatu (OpenPGP czy X.509).
Importowanie certyfikatów
Możesz zaimportować certyfikaty swoje (z archiwum), pary kluczy oraz certyfikaty cudze. Jeśli zaimportujesz swój certyfikat w GPA pojawi się tylko klucz publiczny ale jeśli wcześniej zrobiona była kopia kluczy (prywatny i publiczny) to wczytasz certyfikat razem z oboma kluczami. Jeszcze raz popatrzmy na GPA i Kleopatrę:
Mamy tu tylko jej klucz publiczny jednak mamy też w pliku wyeksportowanym przed chwilką oba jej klucze wraz z plikiem certyfikatu. Kasujemy zatem certyfikat Helgi i w GPA sprawdzamy czy klucz znika – tak właśnie powinno być (użyj przycisku Refresh w GPA Redisplay w Kleopatrze). Teraz zaimportujemy jej certyfikat a następnie parę kluczy zobaczyć różnicę. Klikamy w Import Certificate, wskazujemy plik i zatwierdzamy. Po chwili certyfikat pojawia się w zakładce Imported Certificates. Odświeżając widok w GPA widzimy iż pojawił się nowy klucz publiczny (błękitny), który jest związany z właśnie zaimportowanym certyfikatem. Ostatnim krokiem a tym wypadku jest zmiana poziomu zaufania dla tego certyfikatu. Prawym na certyfikacie i Change Owner Trust a następnie wybieramy odpowiedni poziom co omówione było w poście dotyczącym kluczy. W tym wypadku certyfikat jest traktowany jako obcy gdyż nie mamy z nim związanego klucza prywatnego. Pozostaje teraz kwestia certyfikowania tego nowo wczytanego certyfikatu własnym certyfikatem.
Certyfikowanie certyfikatu
Aby certyfikować wczytany, przechodzimy do zakładki Imported Certificates, klikamy certyfikat Helgi prawym i opcja Certify Certificates a następnie zaznaczmy pozycje certyfikatów jakie chcemy certyfikować oraz pole I have veryfied the fingerprint oznaczające iż mamy pewność co do prawdziwości certyfikatu i zatwierdzamy. Kolejne okno to wybór czy certyfikujemy tylko dla siebie w swoim systemie czy dla wszystkich i od razy posyłamy go na serwer. W tym momencie wybieramy opcje Certify only for myself. Jeśli posiadamy zapisane dwa lub więcej nasze osobiste certyfikaty w oknie tym mamy do wyboru jakim certyfikatem podpiszemy certyfikat Helgi. Aby certyfikować wieloma naszymi certyfikatami operację powtarzamy dla każdego naszego certyfikatu.
Certyfikat pojawia się w zakładce Trusted Certificates co oznacza iż jest on dla nas zaufanym i mamy pewność iż należy do właściwej osoby oraz sam certyfikat jest OK. Jeśli teraz klikniemy w certyfikat aby wyświetlić jego właściwości a następnie w zakładkę User-IDs a następnie w przycisk na dole Load Certificatios pojawi się drzewo zaufania do certyfikatów oznaczające kto ufa temu certyfikatowi. Jeśli była zaznaczona opcja certyfikacji tylko dla siebie to po wyeksportowaniu tego certyfikatu i wczytaniu go u Janka (czy u kogokolwiek innego) nie będzie on już certyfikowany przez te dodatkowe certyfikaty!
Wobec tego eksportujemy do pliku np 19968DE25253ED9B35CD7706B8F12FC0E324503B_2.asc ten certyfikowany przez nas certyfikat, przesiadamy się na komputer Janka, importujemy go i…
Mamy „czysty” certyfikat Helgi. Jeśli przy certyfikowaniu certyfikatu Helgi naszym(i) była włączona opcja certyfikacji dla każdego
to po ponownym wyeksportowaniu go do pliku a następnie imporcie na komputerze Janka pojawia się (prawie) pełne drzewo certyfikacji:
Niestety ponieważ Janek nie ma moich certyfikatów to drzewo nie jest takie zupełnie pełne 🙂 Aby w certyfikacie Helgi pojawiły się odpowiednie wpisy na komputerze Janka muszą znajdować się zaimportowane odpowiednie certyfikaty (te, którymi jest podpisany certyfikat Helgi). Tak więc wyeksportuję teraz je do pliku i zaimportuję na komputerze Janka (można eksportowa / importować więcej pozycji na raz). Po imporcie pliku z moimi certyfikatami u Janka w certyfikacie Helgi pojawiają się już odpowiednie wpisy:
Import pełnego certyfikatu (pary kluczy)
Aby wczytać pełny certyfikat z kluczem (wcześniej wyeksportowany za pomocą opcji Export Secret Keys) musimy plik z tym archiwum wczytać w taki sam sposób jak wyżej. Najpierw jednak kasujemy certyfikat Helgi (na jej komputerze). Teraz opcja Import Certificate i wybieramy plik z archiwum kluczy utworzonym w kroku Eksport pary kluczy związanych z certyfikatem. W przypadku importu swojego certyfikatu z parą kluczy pojawia się informacja mówiąca o zaimportowaniu „Secret certificates”:
Kolejny krok to ustawienie Owner Trus na Ultimate czyli prawym na certyfikacie i Change Owner Trust a w następnym oknie zaznaczamy opcje This is my certificate. W tym momencie certyfikat staje się zaufamy i możemy w pełnie z niego korzystać. Wez pod uwagę, iż plik z tak wyeksportowanymi danymi zawiera Twój klucz prywatny – ten plik należy szczególnie chronić! Jeśli natomiast importujemy cudzy certyfikat (tylko z kluczem publicznym pojawia się nieco inny komunikat:
Informujący wyłącznie o ilości zaimportowanych certyfikatów.
Dodawanie dodatkowych użytkowników do certyfikatu
Ta opcja ma sens tylko w przypadku gdy chcemy dodać więcej adresów e-mail do jednego certyfikatu. Certyfikat zawsze związany jest z jednym podmiotem i raczej nie należy wiązać go z wieloma nazwami użytkownika czy skrzynek e-mail gdyż takie postępowanie może wprowadzać bałagan.
Import i eksport z użyciem serwera kluczy / certyfikatów
W poprzednich postach omówiłem możliwość eksportu i importu do i z publicznych serwerów kluczy. W przypadku certyfikatów są to te same serwery. Zróbmy próbę: klikamy w menu Files / Lookup Certificates on Server po czym wpisujemy Igor Brzezek. Pojawia się lista „certyfikatów”:
tylko, że to jest lista moich kluczy publicznych jakie kiedyś wyeksportowałem na serwery kluczy. Jak więc widać klucz publiczny eksportowany z GPA jest rónoważny w pewnym sensie certyfikatowi z Kleopatry. Pamiętajmy, iż certyfikat zawiera dane podmiotu i klucz publiczny podmiotu podobnie jak sam klucz publiczny także zawiera dane podmiotu do jakiego on należy. Druga sprawa tyczy się tego, iż jest to lista certyfikatów OpenPGP a nie X.509 które różnią się w wielu aspektach. Jeśli chodzi o eksport certyfikatu robi sie to w podobny sposób za pomocą opcji Export Certificates to Server. W spisie kluczy, na serwerze pojawia się nowy wpis:
***********************************************
Ufff… sporo materiału ale warto poznać tego typu programy gdyż wspierają nas w zachowaniu poufności i integralności danych. Jak będzie czas powstaną inne posty w tym temacie.