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.