2015-10-12 4 views
11

ansibleでnginxのインストールと設定(httpsサイトのセットアップSSL証明書とともに)を設定しました。 SSL証明書はパスフレーズの下にあります。再起動時にhttpsサイトでNginxにcertパスワードを渡します。

nginxを再起動しているansilbeタスクを書きたいと思います。問題は次のとおりです。

通常、HTTPSサイトでnginxの内部の再起動時にPEM pass phraseを求めます。 AnはPlaybookの実行中にそのパスフレーズを要求しません。

solutionは、いくつかのプライベートディレクトリに復号化された証明書と鍵を格納してあります。しかし、私は本当に暗号化されていないどこかで自分の証明書と鍵を残したくない。 ansibleを経由して、再起動時にnginxのために(またはOpenSSLのために)パスワードを渡す方法

?完璧なシナリオは次のとおりです。

  1. SSLパスワードを(vars_promt経由で)求めています。もう一つの選択肢は、安全な金庫を使用することです。
  2. Anseasはnginxを再起動しています.nginxがPEM pass phraseを求めている場合、ansibleがパスワードをnginxに渡しています。

それは可能ですか?

答えて

3

秘密鍵に十分な制限がある場合(たとえば、nginxに読めるようにするなど)、これで十分でしょう。 Nginxはとにかくそれをメモリにロードしておく必要があります。これは攻撃者が回復するのが難しいかもしれませんが、ボックスにroot権限でアクセスする場合は、関係なくキーを侵害したと考えるべきです。

あるいは、再起動されるコマンド(例えばecho mypass | service nginx restart)にパイプパスワードをすることができます。これにより、プロセスリストのプレーンテキストで表示されるので、これ以上安全とはみなされません。

私は、ファイルに対するアクセス許可をロックし、パスワードを設定しないことをお勧めします。私はAnsibleがsudo以外の個々のプロンプトに対する応答を指定する手段を持っているとは思わない。

12

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

は、ansible・ボールトでssl_password_fileは、それをコピーすることを保つのnginxを再起動して、成功した場合はそれを削除しています。

実際に動作するかどうか、これには他にどのような副作用があるのか​​はわかりません(たとえば、手動のservice nginx restartはおそらく失敗します)が、私にとっては論理的なアプローチのようです。

+2

それをディスクにコピーするだけでなく...サーバー上に格納していないの全体のポイントを倒す – Basic

+0

それとも、証明書を生成しながら、opensslコマンドに '-nodes'を追加することで、パスフレーズなしで証明書を生成することができかもしれません – Alcalyn