Jaki jest cel argumentu -nodes w openssl?


103

Jaki jest cel -nodesargumentu w openssl?


2
Stack Overflow to witryna zawierająca pytania dotyczące programowania i programowania. To pytanie wydaje się być niezwiązane z tematem, ponieważ nie dotyczy programowania ani programowania. Zobacz, o jakie tematy mogę zapytać w Centrum pomocy. Być może lepszym miejscem do zadawania pytań będzie Super User lub Unix & Linux Stack Exchange .
— jww

20
@jww Nie zgadzam się, openssl to zestaw narzędzi niskiego poziomu i programiści muszą sobie z nim radzić cały czas. Linia jest dość niewyraźna i byłoby wielką stratą, gdybyśmy nie pozwolili na pytania openssl tutaj tylko dlatego, że jest to CLI, a nie biblioteka C.
— gtd

@gtd - to częsta skarga, kiedy je zaznaczam. Zobacz też Gdzie mogę zadawać pytania dotyczące operacji deweloperskich? . (Ale myślę, że popełniłem błąd w tej sprawie - pytanie pochodzi z 2011 r. I uważam, że było wtedy na temat. Nie lubię karać za zmianę polityki).
— jww

2
@gtd - re: "openssl to zestaw narzędzi niskiego poziomu, z którym programiści muszą sobie radzić przez cały czas." - do tego służą Super User lub Unix & Linux Stack Exchange . „… byłoby wielką stratą, gdybyśmy nie pozwolili na pytania openssl…” - pytania dotyczące programowania w języku openssl są tu zawsze mile widziane. Utrata pytań niezwiązanych z programowaniem nie zostanie pominięta, ponieważ Stack Overflow jest witryną programistyczną i programistyczną. Jeśli nie wiesz, jak użyć polecenia, możesz przejść do innych witryn.
— jww

Dzięki za link, opublikuję tam swoją odpowiedź, ponieważ uważam, że jest to bardzo ważna kwestia.
— gtd

Odpowiedzi:


123

Opcją -nodesnie jest angielskie słowo „węzły”, ale raczej „brak DES”. Podany jako argument oznacza, że ​​OpenSSL nie zaszyfruje klucza prywatnego w pliku PKCS # 12 .

Aby zaszyfrować klucz prywatny, możesz pominąć, -nodesa Twój klucz zostanie zaszyfrowany za pomocą 3DES-CBC. Aby zaszyfrować klucz, OpenSSL prosi o podanie hasła i używa tego hasła do wygenerowania klucza szyfrowania za pomocą funkcji wyprowadzania klucza EVP_BytesToKey .

W zależności od wersji OpenSSL i skompilowanych opcji, Ty może być w stanie dostarczyć te opcje w miejscu -nodes:

-des          encrypt private keys with DES
-des3         encrypt private keys with triple DES (default)
-idea         encrypt private keys with idea
-seed         encrypt private keys with seed
-aes128, -aes192, -aes256
              encrypt PEM output with cbc aes
-camellia128, -camellia192, -camellia256
              encrypt PEM output with cbc camellia

Ostatecznie na poziomie biblioteki OpenSSL wywołuje funkcję PEM_write_bio_PrivateKey z wybranym algorytmem szyfrowania (lub jego brakiem).


1
Czy przez szyfrowanie masz na myśli hasło?
— Flimm

4
@Flimm: chronione hasłem, tak. Hasło generuje klucz szyfrowania za pomocą algorytmu wyprowadzania klucza, a szyfrowanie odbywa się za pomocą klucza, a nie hasła. Jedynym sposobem użycia zaszyfrowanego klucza jest jego odszyfrowanie, dla którego musisz znać hasło, którym został zaszyfrowany, aby wygenerować ten sam klucz.
— indyk

dlaczego mam zaszyfrować plik klucza prywatnego? te nie są nikomu publikowane, stąd nazwa. A może się mylę?
— phil294,

1
@Blauhirn: Zaszyfrowałbyś swój plik klucza prywatnego z tego samego powodu, dla którego zaszyfrowałbyś dowolny plik: nie chcesz, aby ktoś, kto uzyska kopię, mógł go przeczytać lub użyć. To, czy należy zaszyfrować klucz prywatny, zależy od ważności klucza i modelu zagrożenia.
— indyw

12

edit: nginx v1.7.3 dodał dyrektywę ssl_password_file, która odczytuje hasła z określonego pliku, próbując każdego hasła z klucza zaszyfrowanego-private.key kontekstu

indy ma rację, że -nodesargument oznacza, że ​​OpenSSL utworzy niezaszyfrowany klucz private.key ; w przeciwnym razie pojawi się monit o hasło, aby utworzyć zaszyfrowany-prywatny.key . patrz req , pkcs12 , CA.pl

czuję jednak, że celem (dla programistów) jest:

  • Serwery HTTP (np. Apache , Nginx ) nie mogą odczytać encrypted-private.key bez hasła →
    • Opcja A - przy każdym uruchomieniu serwera HTTP należy podać hasło dla encrypted-private.key
    • Opcja B - określ ssl_password_file file.keys;w kontekście http { }lub server { }. [ ref ]
    • Opcja C - służy -nodesdo tworzenia private.key bez szyfrowania

przydatne: zablokuj private.key

  • {dodaj serwer HTTP do grupy ssl-cert }
  • sudo chown root:ssl-cert private.key- ch ange własne er private.key do głównego użytkownika, ssl-cert grupie
  • sudo chmod 640 private.key- zmień uprawnienia dostępu private.key na właściciela R / W, grupa R
  • teraz serwer HTTP powinien mieć możliwość uruchomienia i odczytania niezaszyfrowanego klucza private.key

Opcja A

silniejsze zabezpieczenia, ale po ponownym uruchomieniu serwera, trzeba ręcznie wpisać hasło dla encrypted-private.key

Opcja B.

średnie bezpieczeństwo i prawdopodobnie dobra równowaga między klimatyzacją

Opcja C

słabsze zabezpieczenia, ale NIE monituje o niezaszyfrowane hasło private.key


doskonałe wyjaśnienie
— rizidoro

1
Nginx może czytać zaszyfrowane klucze prywatne od wersji 1.7.3, zobacz: nginx.org/en/docs/http/ ...
— 5lava

2
Jaki jest cel wprowadzenia Nginx i jego wersji do dyskusji? Ponadto (B) i (C) oferują równoważne zabezpieczenia (mianowicie listy ACL systemu plików). Problem, który opisujesz, to problem z nienadzorowanym magazynowaniem kluczy i jest to problem bez rozwiązania. Zobacz książkę Gutmann's Engineering Security .
— jww

@jww pytanie brzmi „jaki jest cel ...”. Rozważyłem kontekst pytania (QnA dla programistów), który starałem się wskazać poprzez „jednak czuję, że celem (dla programistów) jest:”. szczególnie w odniesieniu do bezpieczeństwa ... może być dyskusja na temat security.stackexchange.com
— Jake Berger
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.