Пропустить пароль сертификата для Nginx с сайтом https во время перезагрузки
Я настроил установку и настройку nginx (вместе с настройкой SSL-сертификатов для сайта https
) через ansible. SSL сертификаты находятся под парольными фразами.
Я хочу написать задание ansilbe, которое перезапускает nginx. Проблема в следующем.
Обычно nginx с https-сайтом внутри запрашивает PEM pass phrase
при перезапуске. Ansible не запрашивает эту фразу во время исполнения playbook.
Существует решение с сохранением расшифрованного сертификата и ключа в каком-то приватном каталоге. Но я не хочу оставлять свой сертификат и ключ где-нибудь в незашифрованном виде.
Как передать пароль nginx (или openssl) во время перезапуска через ansible
? Идеальный сценарий следующий:
- Ansible запрашивает пароль SSL (через
vars_promt
). Другим вариантом является использование ansible Vault. - Ansible перезапускает nginx, и когда nginx запрашивает пароль
PEM pass phrase
, ansible передает пароль nginx.
Является ли это возможным?
Ответы
Ответ 1
Nginx имеет ssl_password_file
параметр.
Задает файл с ключевыми фразами для секретных ключей, где каждая кодовая фраза указана в отдельной строке. При загрузке ключа проверяются парольные фразы.
Пример:
http {
ssl_password_file /etc/keys/global.pass;
...
server {
server_name www1.example.com;
ssl_certificate_key /etc/keys/first.key;
}
server {
server_name www2.example.com;
# named pipe can also be used instead of a file
ssl_password_file /etc/keys/fifo;
ssl_certificate_key /etc/keys/second.key;
}
}
Что вы можете сделать, так это сохранить ssl_password_file
в незащищенном хранилище, скопировать его, перезапустить nginx и затем успешно удалить его.
У меня нет непосредственного опыта, если он действительно работает или какие другие побочные эффекты могут иметь (например, ручной service nginx restart
, вероятно, не удастся), но он кажется логичным для меня.
Ответ 2
Если у вас есть достаточно ограниченные разрешения на закрытом ключе (например, только чтобы nginx мог его прочитать), это, вероятно, будет достаточно хорошим. В любом случае Nginx должен будет загружать его в память; это может быть труднее для злоумышленника восстановить, но если у них есть корневой доступ к ящику, вы должны подумать о том, что ключ был скомпрометирован независимо.
В качестве альтернативы вы можете подключить пароль к команде, которая перезапускается (например, echo mypass | service nginx restart
). Это приведет к тому, что он будет показан в виде простого текста в списках процессов и не должен считаться более безопасным.
Я бы рекомендовал заблокировать права доступа к файлу и не иметь на нем пароля. Я не верю, что Ansible имеет способ указать ответы на отдельные подсказки, кроме sudo.