Tworzenie infrastruktury klucza publicznego Za pomocą łatwych RSA Skrypty

Pierwszym krokiem podczas konfigurowania OpenVPN jest stworzenie Public Key Infrastructure (PKI). PKI składa się z:

  • Mistrz publicznego Certificate Authority (CA) Certyfikat i klucz prywatny.
  • Osobny certyfikat publiczny i klucz prywatny pary (określanego dalej jako certyfikat) dla każdego serwera i każdego klienta.

Aby ułatwić proces tworzenia certyfikatów, OpenVPN pochodzi z kolekcji RSA Główne skrypty manangement (w oparciu o narzędzia wiersza polecenia openssl) znany jako easy-rsa.

Uwaga: Tylko pliki .key muszą być utrzymywane w tajemnicy, .CRT i .csr pliki mogą być przesyłane przez niezabezpieczone kanały, takie jak e-mail zwykłego tekstu.

W tym artykule przedstawiono niezbędne certyfikaty są tworzone przez administratora w katalogu domowym roota. To gwarantuje, że wygenerowane pliki mają prawa własności i uprawnień, i są bezpieczne od innych użytkowników.

Uwaga: Certyfikaty mogą być tworzone na dowolnym komputerze. Dla najwyższego bezpieczeństwa, generowanie certyfikatów na fizycznie zabezpieczonym komputerze odłączony od każdej sieci, i upewnij się, że wygenerowany ca.key klucz prywatny jest w kopii zapasowej i nigdy dostępne dla każdego.
Ostrzeżenie: Upewnij się, że wygenerowane pliki są kopiowane, w szczególności pliki ca.key i ca.crt, ponieważ jeśli stracił nie będzie w stanie stworzyć każdy nowy, ani cofnąć żadnych skompromitowanych certyfikatów, wymagając w ten sposób wytworzenie nowego Certificate Authority (CA) certyfikat, unieważnienia całej infrastruktury PKI.

Instalacja easy-rsa skrypty

Instalowanie skryptów w następujący sposób:

# pacman -S łatwy RSA
# cp -r / usr / share / easy-rsa / root

Tworzenie certyfikatów

Przejdź do katalogu, w którym zainstalowano skrypty.

# cd / root / easy-rsa

Aby zapewnić spójne stosowanie wartości podczas generowania PKI, Wartości domyślny zestaw do wykorzystania przez skrypty generujące PKI. Edycja / root / easy-rsa / Vars i przynajmniej ustawić KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG, i parametry KEY_EMAIL (nie pozostawiają żadnego z tych parametrów pusty). Zmiana parametru KEY_SIZE do 2048 dla SSL / TLS do korzystania 2048bit kluczy RSA do uwierzytelniania.

/root / easy-rsa / Vars
# Ustawienia parametrów łatwe RSA

# UWAGA: Jeśli zainstalowałeś z RPM,
# nie zmieniać ten plik w miejscu, w
# /usr / share / openvpn / easy-rsa --
# zamiast, należy skopiować cały
# Katalog easy-rsa do innej lokalizacji
# (taki jak / etc / openvpn) Tak więc, że
# zmiany nie zostaną wymazane przez przyszłości
# OpenVPN pakiet aktualizacyjny.

# Zmienna ta powinna wskazywać
# górny poziom easy-rsa
# drzewo.
eksport EASY_RSA ="`pwd`"

#
# Zmienna ta powinna wskazywać
# żądane pliki wykonywalne
#
eksport OpenSSL ="openssl"
eksport PKCS11TOOL ="pkcs11-tool"
eksport GREP ="grep"

# Zmienna ta powinna wskazywać
# plik włączone openssl.cnf
# z easy-rsa.
eksport KEY_CONFIG = `$ EASY_RSA / whichopensslcnf $ EASY_RSA`

# Edytować tę zmienną, aby wskazywał na
# Twój wkrótce zostać utworzony klucz
# informator.
#
# OSTRZEŻENIE: czyste-wszystko zrobi
# -rf rm na tym katalogu
# więc upewnij się określić
# prawidłowo!
eksport KEY_DIR ="$EASY_RSA / klawisze"

# Wydaj rm -rf ostrzeżenie
UWAGA echo: Jeśli prowadzisz ./clean-all, Będę robić -rf rm $ KEY_DIR

# poprawki pkcs11
eksport PKCS11_MODULE_PATH ="manekin"
eksport PKCS11_PIN ="manekin"

# Podnieś to 2048 Jeśli ty
# są paranoidalne.  Będzie to powolny
# w dół wyników negocjacji TLS
# jak również PARMS DH jednorazowych
# proces generacji.
eksport KEY_SIZE = 2048

# Na ile dni powinna klucz główny CA wygaśnie?
eksport CA_EXPIRE = 3650

# Na ile dni powinna certyfikaty wygasają?
eksport KEY_EXPIRE = 3650

# Są to wartości domyślne dla pól
# które będą umieszczane w certyfikacie.
# Nie zostawiaj żadnego z tych pól pustych.


eksport KEY_COUNTRY ="NAS"
eksport KEY_PROVINCE ="CA"
eksport KEY_CITY ="Acme Acres"
eksport KEY_ORG ="Kulminacja"
eksport KEY_EMAIL ="roadrunner@acmecorp.org"
#eksport KEY_EMAIL=mail@host.domain
eksport KEY_CN = Acme-CA
KEY_NAME eksport = Acme-CA
= KEY_OU eksport""
eksport PKCS11_MODULE_PATH = changeme
eksport PKCS11_PIN = 1234

Wyeksportować zmienne środowiskowe.

# ./vars źródłowe

Usuń wszystkie wcześniej utworzone certyfikatów.

# ./Wyczyść wszystko
Uwaga: Wprowadzanie . (kropka) Gdy pojawi się monit o wartości, wygasza się parametr.

Skrypt build-ca generuje Certificate Authority (CA) certyfikat.

# ./Build-like
generowanie 2048 bitowy klucz prywatny RSA
..............++++++
...++++++
pisanie nowego klucza prywatnego do „ca.key”
-----
Masz zamiar zostać poproszony o podanie informacji, które zostaną włączone
na żądanie certyfikatu.
Co masz zamiar wprowadzić to, co nazywa się nazwa wyróżniająca lub DN.
Istnieje sporo pola, ale można pozostawić niektóre puste
Dla niektórych dziedzinach nie będzie wartość domyślna,
Jeśli wpiszesz „”, pole zostanie pozostawiona pusta.
-----
Nazwa kraju (2 Kod list) [NAS]:
Stan lub nazwa prowincji (pełne imię i nazwisko) [CA]:
Nazwa miejscowości (na przykład, Miasto) [Acme Acres]:
Nazwa organizacji (na przykład, firma) [Kulminacja]:
Nazwa jednostki organizacyjnej (na przykład, Sekcja) []:
Nazwa zwyczajowa (na przykład, imię i nazwisko lub nazwa hosta twojego serwera) [Acme-CA]:
Nazwa [Acme-CA]:
Adres e-mail [roadrunner@acmecorp.org]:

Skrypt build-key-serwer # ./build-key-server <server name> generuje certyfikat serwera. Upewnij się, że nazwa serwera (Nazwa zwyczajowa podczas uruchamiania skryptu) jest unikalny.

Uwaga: Nie należy wprowadzać hasło wyzwaniem lub nazwę firmy, gdy skrypt monituje o jeden.
# ./build-key-serwer Elmer
generowanie 2048 bitowy klucz prywatny RSA
.....................++++++
.......................................................++++++
pisanie nowego klucza prywatnego do „elmer.key”
-----
Masz zamiar zostać poproszony o podanie informacji, które zostaną włączone
na żądanie certyfikatu.
Co masz zamiar wprowadzić to, co nazywa się nazwa wyróżniająca lub DN.
Istnieje sporo pola, ale można pozostawić niektóre puste
Dla niektórych dziedzinach nie będzie wartość domyślna,
Jeśli wpiszesz „”, pole zostanie pozostawiona pusta.
-----
Nazwa kraju (2 Kod list) [NAS]:
Stan lub nazwa prowincji (pełne imię i nazwisko) [CA]:
Nazwa miejscowości (na przykład, Miasto) [Acme Acres]:
Nazwa organizacji (na przykład, firma) [Kulminacja]:
Nazwa jednostki organizacyjnej (na przykład, Sekcja) []:
Nazwa zwyczajowa (na przykład, imię i nazwisko lub nazwa hosta twojego serwera) [Elmer]:
Nazwa [Acme-CA]:
Adres e-mail [roadrunner@acmecorp.org]:

Proszę podać następujące atrybuty „ekstra”
zostać wysłane z Twojego żądania certyfikatu
Hasło wyzwanie []:
Opcjonalna nazwa firmy []:
Korzystanie z konfiguracji z /root/easy-rsa/openssl-1.0.0.cnf
Sprawdź, czy wniosek jest zgodny z podpisem
podpis ok
Przedmiotem jest nazwa wyróżniająca się następująco
Nazwa kraju           :NADAJĄCY SIĘ DO DRUKU:'NAS'
stateOrProvinceName   :NADAJĄCY SIĘ DO DRUKU:'CA'
localityName          :NADAJĄCY SIĘ DO DRUKU:'Acme Acres'
Nazwa organizacji      :NADAJĄCY SIĘ DO DRUKU:'Kulminacja'
Nazwa zwyczajowa            :NADAJĄCY SIĘ DO DRUKU:'Elmer'
Nazwa                  :NADAJĄCY SIĘ DO DRUKU:'Acme-CA'
emailAddress          :IA5String:'Roadrunner@acmecorp.org'
Certyfikat ma być certyfikowany aż gru 27 19:11:59 2021 GMT (3650 dni)
Podpisania certyfikatu? [r / n]:i

1 poza 1 certyfikat żądania certyfikatów, popełnić? [r / n]r
Wypisać bazę danych 1 nowe wpisy
Data Base Aktualizacja

Skrypt build-dh generuje Parametry Diffie-Hellman .plik PEM potrzebne przez serwer.

Uwaga: Byłoby lepiej, aby wygenerować nowy dla każdego serwera, ale można użyć tego samego, jeśli chcesz.
# ./build-dh
Generowanie parametrów DH, 2048 trochę długo bezpieczny prime, generator 2
To będzie trwać długo
..+.............................................................................
.
.
.
............+...............+...................................................
..................................................................++*++*

Skrypt build-key # ./build-key <client name> generuje certyfikat klienta. Upewnij się, że nazwa klienta (Nazwa zwyczajowa podczas uruchamiania skryptu) jest unikalny.

Uwaga: Nie należy wprowadzać hasło wyzwaniem lub nazwę firmy, gdy skrypt monituje o jeden.
# ./budowa pod klucz bugów
generowanie 2048 bitowy klucz prywatny RSA
....++++++
.............................................................++++++
pisanie nowego klucza prywatnego do „bugs.key”
-----
Masz zamiar zostać poproszony o podanie informacji, które zostaną włączone
na żądanie certyfikatu.
Co masz zamiar wprowadzić to, co nazywa się nazwa wyróżniająca lub DN.
Istnieje sporo pola, ale można pozostawić niektóre puste
Dla niektórych dziedzinach nie będzie wartość domyślna,
Jeśli wpiszesz „”, pole zostanie pozostawiona pusta.
-----
Nazwa kraju (2 Kod list) [NAS]:
Stan lub nazwa prowincji (pełne imię i nazwisko) [CA]:
Nazwa miejscowości (na przykład, Miasto) [Acme Acres]:
Nazwa organizacji (na przykład, firma) [Kulminacja]:
Nazwa jednostki organizacyjnej (na przykład, Sekcja) []:
Nazwa zwyczajowa (na przykład, imię i nazwisko lub nazwa hosta twojego serwera) [błędy]:
Nazwa [Acme-CA]:
Adres e-mail [roadrunner@acmecorp.org]:

Proszę podać następujące atrybuty „ekstra”
zostać wysłane z Twojego żądania certyfikatu
Hasło wyzwanie []:
Opcjonalna nazwa firmy []:
Korzystanie z konfiguracji z /root/easy-rsa/openssl-1.0.0.cnf
Sprawdź, czy wniosek jest zgodny z podpisem
podpis ok
Przedmiotem jest nazwa wyróżniająca się następująco
Nazwa kraju           :NADAJĄCY SIĘ DO DRUKU:'NAS'
stateOrProvinceName   :NADAJĄCY SIĘ DO DRUKU:'CA'
localityName          :NADAJĄCY SIĘ DO DRUKU:'Acme Acres'
Nazwa organizacji      :NADAJĄCY SIĘ DO DRUKU:'Kulminacja'
Nazwa zwyczajowa            :NADAJĄCY SIĘ DO DRUKU:'błędy'
Nazwa                  :NADAJĄCY SIĘ DO DRUKU:'Acme-CA'
emailAddress          :IA5String:'Roadrunner@acmecorp.org'
Certyfikat ma być certyfikowany aż gru 27 19:18:27 2021 GMT (3650 dni)
Podpisania certyfikatu? [r / n]:i

1 poza 1 certyfikat żądania certyfikatów, popełnić? [r / n]r
Wypisać bazę danych 1 nowe wpisy
Data Base Aktualizacja

Generowanie tajemnicy Hash oparte kod uwierzytelnienia wiadomości (HMAC) uruchamiając: # openvpn --genkey --secret /root/easy-rsa/keys/ta.key

Będzie on służył dodać dodatkowy HMAC podpis do wszystkich pakietów / TLS SSL handshake. Oprócz wszystkich pakietów UDP nie mają prawidłowego HMAC podpis zostanie natychmiast spadła, ochrony przed:

  • Portscanning.
  • DOS atakuje na porcie UDP OpenVPN.
  • SSL / TLS Handshake inicjacje z nieautoryzowanych urządzeń.
  • Ewentualne luki przepełnienie bufora w implementacji SSL / TLS.

Wszystkie utworzone klucze i certyfikaty były przechowywane w / root / easy-klucze RSA /. Jeśli się pomylisz, można zacząć od nowa, ponownie uruchamiając oczyszczenia cały skrypt.

Ostrzeżenie: Spowoduje to usunięcie wszystkich wcześniej wygenerowanych certyfikatów przechowywanych w / root / easy-kluczy RSA /, włączając Certificate Authority (CA) certyfikat.

Konwersja certyfikaty zaszyfrowanej .p12

niektóre programy (takich jak Android) będzie tylko do odczytu certyfikaty VPN, które są przechowywane w zaszyfrowane hasłem pliku .p12. Te mogą być generowane za pomocą następującego polecenia:

# openssl pkcs12 -export -inkey klucze / bugs.key klucze -w / bugs.crt klucze -certfile / ca.crt wymeldowanie klawisze / bugs.p12

Sprawdzanie Korzystanie OpenSSL

Jeśli chcesz zapoznać się z informacjami w certyfikacie, CSR lub klucza prywatnego, używać tych poleceń. Możesz również sprawdzić CSRs oraz sprawdzić certyfikaty Korzystając z naszych narzędzi online.

  • Sprawdź żądania podpisania certyfikatu (CSR)
    openssl req -text -noout -verify -in CSR.csr
  • Sprawdź klucz prywatny
    openssl rsa -in privateKey.key -czek
  • Sprawdź certyfikat
    openssl x509 -in certificate.crt --noout tekst
  • Sprawdź pliku PKCS # 12 (.pfx lub .p12)
    openssl pkcs12 -info -in keyStore.p12

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *