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).
@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
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
Odpowiedzi:
Opcją
-nodes
nie 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ąć,
-nodes
a 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
:Ostatecznie na poziomie biblioteki OpenSSL wywołuje funkcję PEM_write_bio_PrivateKey z wybranym algorytmem szyfrowania (lub jego brakiem).
źródło
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
-nodes
argument 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.plczuję jednak, że celem (dla programistów) jest:
ssl_password_file file.keys;
w kontekściehttp { }
lubserver { }
. [ ref ]-nodes
do tworzenia private.key bez szyfrowaniaprzydatne: zablokuj private.key
sudo chown root:ssl-cert private.key
- ch ange własne er private.key do głównego użytkownika, ssl-cert grupiesudo chmod 640 private.key
- zmień uprawnienia dostępu private.key na właściciela R / W, grupa ROpcja 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
źródło