web-dev-qa-db-fra.com

Passer le mot de passe du certificat à Nginx avec le site https lors du redémarrage

J'ai configuré l'installation et la configuration de nginx (ainsi que la configuration des certificats SSL pour le site https) via ansible . Les certificats SSL sont sous des mots de passe.

Je veux écrire la tâche ansilbe qui redémarre nginx. Le problème est le suivant.

Normalement, nginx avec le site https à l'intérieur demande PEM pass phrase lors du redémarrage. Ansible ne demande pas cette phrase secrète lors de l'exécution du playbook.

Il y a solution avec le stockage du certificat et de la clé décryptés dans un répertoire privé. Mais je ne veux pas vraiment laisser mon certificat et ma clé dans un endroit non crypté.

Comment passer le mot de passe à nginx (ou à openssl) lors du redémarrage via ansible? Le scénario parfait suit:

  1. Ansible demande un mot de passe SSL (via vars_promt). Une autre option consiste à utiliser le coffre-fort ansible.
  2. Ansible redémarre nginx et lorsque nginx demande PEM pass phrase, ansible passe le mot de passe à nginx.

C'est possible?

18
petRUShka

Nginx a ssl_password_file paramètre.

Spécifie un fichier avec des phrases de passe pour les clés secrètes où chaque phrase de passe est spécifiée sur une ligne distincte. Les phrases secrètes sont essayées tour à tour lors du chargement de la clé.

Exemple:

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;
    }
}

Ce que vous pourriez faire, c'est de garder cela ssl_password_file dans ansible-vault, copiez-le, redémarrez nginx puis en cas de succès supprimez-le.

Je n'ai aucune expérience de première main si cela fonctionnera réellement ou quels autres effets secondaires cela pourrait avoir (par exemple manuel service nginx restart échouera probablement), mais cela me semble une approche logique.

28
Mxx

Si vous avez les autorisations suffisamment restrictives sur la clé privée (par exemple, uniquement pour permettre à nginx de la lire), cela serait probablement suffisant. Nginx devra de toute façon le garder chargé en mémoire; cela pourrait être plus difficile pour un attaquant de récupérer, mais s'il a un accès root à la boîte, vous devriez considérer la clé comme compromise.

Vous pouvez également diriger le mot de passe vers la commande qui redémarre (par exemple echo mypass | service nginx restart). Cela le fera apparaître en texte brut sur les listes de processus et ne devrait pas être considéré comme plus sûr.

Je recommande de verrouiller les autorisations sur le fichier et de ne pas avoir de mot de passe dessus. Je ne pense pas qu'Ansible ait un moyen de spécifier les réponses aux invites individuelles, à part Sudo.

4
Dan