Dzień dobry! Chciałbym podzielić się swoim doświadczeniem na ten temat.
RUTOKEN to sprzętowe i programowe rozwiązania w dziedzinie uwierzytelniania, ochrony informacji i podpisu elektronicznego. W zasadzie jest to taka pamięć flash, która może przechowywać dane uwierzytelniające, które użytkownik wykorzystuje do logowania się do systemu.
W tym przykładzie używany jest RUTOKEN ECP 2.0.
Aby pracować z tym RUTOKENEM, należy.
Dla systemu Windows, zainstalowanie samego sterownika zapewnia wszystko, czego potrzeba, aby system operacyjny rozpoznał Twój RUTOKEN i umożliwił z nim pracę.
Z RUTOKENEM można wchodzić w interakcje na różne sposoby. Można uzyskać do niego dostęp z części serwerowej aplikacji, a można również bezpośrednio z części klienckiej. W tym przykładzie omówione zostanie wchodzenie w interakcję z RUTOKENEM z części klienckiej aplikacji.
Część kliencka aplikacji wchodzi w interakcję z RUTOKENEM za pośrednictwem wtyczki RUTOKEN. Jest to program, który instaluje się osobno na każdej przeglądarce. Dla systemu Windows wystarczy po prostu pobrać i zainstalować wtyczkę, .
Wszystko, teraz możemy wchodzić w interakcję z RUTOKENEM z części klienckiej aplikacji.
W tym przykładzie omówiono pomysł realizacji algorytmu autoryzacji użytkownika w systemie z wykorzystaniem schematu challenge-response.
Istota pomysłu jest następująca:
- Klient wysyła żądanie autoryzacji do serwera.
- Serwer w odpowiedzi na żądanie klienta wysyła losowy ciąg.
- Klient uzupełnia ten ciąg losowymi 32 bitami.
- Klient podpisuje otrzymany ciąg swoim certyfikatem.
- Klient wysyła do serwera otrzymaną zakodowaną wiadomość.
- Serwer sprawdza podpis, uzyskując oryginalną niezakodowaną wiadomość.
- Serwer odłącza ostatnie 32 bity od otrzymanej niezakodowanej wiadomości.
- Serwer porównuje otrzymany wynik z wiadomością, która została wysłana przy żądaniu autoryzacji.
- Jeśli wiadomości są identyczne, autoryzacja uznawana jest za pomyślną.
W przedstawionym powyżej algorytmie istnieje pojęcie certyfikatu. W ramach tego przykładu należy rozumieć pewną teorię kryptograficzną. Na Habrze znajduje się .
W tym przykładzie użyjemy asymetrycznych algorytmów szyfrowania. Aby zrealizować asymetryczne algorytmy, konieczne jest posiadanie pary kluczy i certyfikatu.
Para kluczy składa się z dwóch części: klucza prywatnego i klucza publicznego. Klucz prywatny, jak wskazuje jego nazwa, musi być sekretny. Używamy go do odszyfrowywania informacji. Klucz publiczny można przekazać każdemu. Ten klucz służy do szyfrowania danych. W ten sposób każdy użytkownik może zaszyfrować dane, używając klucza publicznego, ale tylko właściciel klucza prywatnego może odszyfrować te informacje.
Certyfikat to elektroniczny dokument, który zawiera informacje o użytkowniku, do którego należy certyfikat, oraz o kluczu publicznym. Posiadając certyfikat, użytkownik może podpisać dowolne dane i wysłać je na serwer, który może sprawdzić ten podpis i odszyfrować dane.
Aby poprawnie podpisać wiadomość certyfikatem, należy prawidłowo go stworzyć. W tym celu na RUTOKENIE najpierw tworzy się parę kluczy, a następnie certyfikat musi być powiązany z kluczem publicznym tej pary kluczy. Certyfikat musi mieć dokładnie ten klucz publiczny, który znajduje się na RUTOKENIE, to jest ważne. Jeśli po prostu stworzymy parę kluczy i certyfikat bezpośrednio w aplikacji klienckiej, to w jaki sposób serwer będzie mógł odszyfrować tę zaszyfrowaną wiadomość? W końcu nie zna nic ani o parze kluczy, ani o certyfikacie.
Jeśli zgłębimy ten temat, możemy znaleźć interesujące informacje w internecie. Istnieją pewne centra certyfikacji, które z góry ufamy. Te centra certyfikacji mogą wydawać certyfikaty użytkownikom, którzy instalują te certyfikaty na swoim serwerze. Po tym, gdy klient zwraca się do tego serwera, widzi ten certyfikat i stwierdza, że został wydany przez centrum certyfikacji, co oznacza, że temu serwerowi można ufać. Więcej informacji na temat tego, jak poprawnie wszystko skonfigurować, również jest mnóstwo w internecie. .
Wracając do naszego zadania, rozwiązanie wydaje się oczywiste. W jakiś sposób musimy stworzyć własny urząd certyfikacji. Ale zanim to zrobimy, musimy zrozumieć, na jakiej podstawie urząd certyfikacji powinien wydawać certyfikat użytkownikowi, ponieważ nic o nim nie wie. (Na przykład jego imię, nazwisko itd.) Istnieje coś, co nazywa się żądaniem certyfikatu. Więcej informacji na temat tego standardu można znaleźć na Wikipedii.
Będziemy używać wersji 1.7 — PKCS#10.
Opiszemy algorytm generowania certyfikatu na RUTOKENIE (źródło — ):
- Na kliencie tworzymy parę kluczy i zapisujemy ją na RUTOKENIE. (zapisywanie odbywa się automatycznie)
- Na kliencie tworzymy żądanie certyfikatu.
- Z klienta wysyłamy to żądanie do serwera.
- Po otrzymaniu żądania certyfikatu na serwerze, wystawiamy certyfikat naszym urządzem certyfikacji.
- Wysyłamy ten certyfikat do klienta.
- Na kliencie zapisujemy certyfikat na RUTOKENIE.
- Certyfikat musi być powiązany z tą parą kluczy, która została utworzona w pierwszym kroku.
Teraz staje się jasne, jak serwer będzie w stanie odszyfrować podpis klienta, skoro sam wydał mu certyfikat.
W następnej części szczegółowo omówimy, jak skonfigurować własne urząd certyfikacji na podstawie pełnoprawnej biblioteki kryptograficznej open source openSSL.
Źródło: habr.com
