Яка мета аргументу -nodes у openssl?


103

Яка мета -nodesаргументу у openssl?


2
Переповнення стека - це сайт для програмування та питань розробки. Це питання видається поза темою, оскільки мова не йде про програмування чи розробку. Дивіться, які теми я можу запитати тут у довідковому центрі. Можливо, краще користуватися запитом Super User або Unix & Linux Stack Exchange .
jww

20
@jww Я не погоджуюся, openssl - це інструментарій низького рівня, і розробникам доводиться постійно працювати з цим. Лінія досить розмита, і було б великою втратою не допустити питань opensl тут просто тому, що це, звичайно, CLI, а не C lib.
gtd

@gtd - це часті скарги, коли я посилаю на них. Також див. Де я публікую запитання щодо Dev Ops? . (Але я думаю, що я помилився в цьому - питання з 2011 року, і я вважаю, що це було вже на тему. Я не люблю штрафувати за зміну політики).
jww

2
@gtd - re: "openssl - це інструментарій низького рівня, і розробникам доводиться постійно працювати з цим." - саме для цього призначений Super User або Unix & Linux Stack Exchange . "... було б великою втратою не допустити питань opensl ..." - тут завжди вітаються питання програмування opensl C. Втрата непрограмуючих питань не буде упущена, оскільки Stack Overflow - це сайт програмування та розробки. Є інші сайти, на які можна зайти, коли ви не знаєте, як використовувати команду.
jww

Дякую за посилання, я опублікую свою відповідь там, оскільки я думаю, що це дуже важливе питання.
gtd

Відповіді:


123

Параметр -nodes- не англійське слово "nodes", а скоріше "no DES". Якщо його подано як аргумент, це означає, що OpenSSL не буде шифрувати приватний ключ у файлі PKCS # 12 .

Щоб зашифрувати приватний ключ, ви можете його опустити, -nodesі ваш ключ буде зашифрований за допомогою 3DES-CBC. Щоб зашифрувати ключ, OpenSSL запропонує ввести пароль, і він використовує цей пароль для створення ключа шифрування за допомогою функції виведення ключа EVP_BytesToKey .

Залежно від вашої версії OpenSSL та компільованих параметрів, ви можете надати ці параметри замість -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

У кінцевому рахунку на рівні бібліотеки OpenSSL викликає вибрану функцію PEM_write_bio_PrivateKey з алгоритмом шифрування (або його відсутністю).


1
Під шифруванням ви маєте на увазі пароль?
Flimm

4
@Flimm: захищено паролем, так. Пароль генерує ключ шифрування за допомогою алгоритму виведення ключа, а шифрування робиться за допомогою ключа, а не пароля. Єдиний спосіб використовувати зашифрований ключ - це розшифрувати його спочатку, для чого вам потрібно знати пароль, за допомогою якого він був зашифрований, щоб створити той самий ключ.
indiv

чому я повинен шифрувати свій файл приватного ключа? ті не публікуються нікому, звідси і назва. Або я помиляюся?
phil294

1
@Blauhirn: Ви зашифрували файл приватного ключа з тієї ж причини, що і ви зашифрували будь-який файл: ви не хочете, щоб хтось, хто отримує копію, міг її прочитати чи використати. Чи варто шифрувати приватний ключ, залежить від важливості ключа та вашої моделі загрози.
indiv

12

редагувати: nginx v1.7.3 додав директиву ssl_password_file, яка читає парольні фрази із зазначеного файлу, намагаючись кожну парольну фразу на зашифрованому приватному ключі контексту.

indiv правильний, що -nodesаргумент означає, що OpenSSL створить незашифрований private.key ; інакше з'явиться запит із парольною фразою для створення шифрованого-private.key . див. req , pkcs12 , CA.pl

однак я вважаю, що мета (для програмістів) полягає в тому, що:

  • HTTP-сервери (наприклад, Apache , Nginx ) не можуть читати зашифровані-private.key без парольної фрази →
    • Варіант A - кожен раз, коли HTTP-сервер запускається, повинен надати парольну фразу для encrypted-private.key
    • Варіант В - вкажіть ssl_password_file file.keys;у контексті http { }чи в server { }контексті. [ ref ]
    • Варіант С - використовувати -nodesдля створення private.key без шифрування

корисно: заблокуйте private.key

  • {додати сервер HTTP до групи ssl-cert }
  • sudo chown root:ssl-cert private.key- ch ange own er of private.key для root користувача, ssl-cert group
  • sudo chmod 640 private.key- змінити права доступу private.key на власника R / W, група R
  • Тепер сервер HTTP повинен мати можливість запускати та читати незашифровані private.key

Варіант А

Більш сильна безпека, але при перезапуску сервера доводиться вручну вводити пароль для encrypted-private.key

Варіант В

середня безпека та, ймовірно, хороший баланс між кондиціонерами

Варіант С

слабша безпека, але НЕ запропоновано незашифрований пароль. private.key


відмінне пояснення
rizidoro

1
Nginx може читати зашифровані приватні ключі з версії 1.7.3, див.: Nginx.org/en/docs/http/…
5слава

2
Яка мета залучення nginx та його версій до дискусії? Також (B) і (C) пропонують рівноцінну безпеку (а саме ACL-файли файлової системи). Проблема, яку ви описуєте, - це проблема безперебійного зберігання ключів , і це проблема без вирішення. Дивіться книгу інженерної безпеки Гутмана .
jww

@jww питання задає "яка мета ...". Я розглядав контекст питання (QnA для програмістів), який я намагався вказати через "однак, я вважаю, що мета (для програмістів) полягає в тому, що:". зокрема щодо безпеки .. може бути дискусія для security.stackexchange.com
Джейк Бергер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.