Подтвердить что ты не робот

Пропустить пароль сертификата для Nginx с сайтом https во время перезагрузки

Я настроил установку и настройку nginx (вместе с настройкой SSL-сертификатов для сайта https) через ansible. SSL сертификаты находятся под парольными фразами.

Я хочу написать задание ansilbe, которое перезапускает nginx. Проблема в следующем.

Обычно nginx с https-сайтом внутри запрашивает PEM pass phrase при перезапуске. Ansible не запрашивает эту фразу во время исполнения playbook.

Существует решение с сохранением расшифрованного сертификата и ключа в каком-то приватном каталоге. Но я не хочу оставлять свой сертификат и ключ где-нибудь в незашифрованном виде.

Как передать пароль nginx (или openssl) во время перезапуска через ansible? Идеальный сценарий следующий:

  1. Ansible запрашивает пароль SSL (через vars_promt). Другим вариантом является использование ansible Vault.
  2. Ansible перезапускает nginx, и когда nginx запрашивает пароль PEM pass phrase, ansible передает пароль nginx.

Является ли это возможным?

4b9b3361

Ответ 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.