在重启期间使用 https 站点将证书密码传递给 Nginx
Pass cert password to Nginx with https site during restart
我通过 ansible 配置了 nginx 安装和配置(以及 https
站点的设置 SSL 证书)。 SSL 证书位于密码短语之下。
我想写一个重启nginx的ansilbe任务。问题如下。
正常情况下,带有 https 站点的 nginx 在重启时会请求 PEM pass phrase
。 Ansible 在执行 playbook 期间不会要求输入该密码。
有 solution 将解密的证书和密钥存储在某个私人目录中。但我真的不想将我的证书和密钥留在未加密的地方。
重启时如何通过ansible
将密码传递给nginx(或openssl)?完美场景如下:
- Ansible 正在询问 SSL 密码(通过
vars_promt
)。另一种选择是使用 ansible vault。
- Ansible 正在重启 nginx,当 nginx 请求
PEM pass phrase
时,ansible 正在将密码传递给 nginx。
可能吗?
如果您对私钥有足够的权限限制(例如,只让 nginx 能够读取它),这可能就足够了。无论如何,Nginx 都必须将其加载到内存中;这对于攻击者来说可能更难恢复,但如果他们有 root 访问权限,你应该认为密钥已经泄露。
或者,您可以将密码通过管道传输到正在重新启动的命令中(例如 echo mypass | service nginx restart
)。这将导致它以纯文本形式显示在进程列表中,不应被视为更安全。
我建议锁定该文件的权限,不要为其设置密码。我不相信 Ansible 有任何方法可以指定对个别提示的响应,除了 sudo。
Nginx 有 ssl_password_file
个参数。
Specifies a file with passphrases for secret keys where each passphrase is specified on a separate line. Passphrases are tried in turn when loading the key.
示例:
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
保存在 ansible-vault 中,复制它,重新启动 nginx,然后如果成功删除它。
我没有第一手经验,如果它真的有效或者这可能有什么其他副作用(例如手动 service nginx restart
可能会失败),但这对我来说似乎是一种合乎逻辑的方法.
我通过 ansible 配置了 nginx 安装和配置(以及 https
站点的设置 SSL 证书)。 SSL 证书位于密码短语之下。
我想写一个重启nginx的ansilbe任务。问题如下。
正常情况下,带有 https 站点的 nginx 在重启时会请求 PEM pass phrase
。 Ansible 在执行 playbook 期间不会要求输入该密码。
有 solution 将解密的证书和密钥存储在某个私人目录中。但我真的不想将我的证书和密钥留在未加密的地方。
重启时如何通过ansible
将密码传递给nginx(或openssl)?完美场景如下:
- Ansible 正在询问 SSL 密码(通过
vars_promt
)。另一种选择是使用 ansible vault。 - Ansible 正在重启 nginx,当 nginx 请求
PEM pass phrase
时,ansible 正在将密码传递给 nginx。
可能吗?
如果您对私钥有足够的权限限制(例如,只让 nginx 能够读取它),这可能就足够了。无论如何,Nginx 都必须将其加载到内存中;这对于攻击者来说可能更难恢复,但如果他们有 root 访问权限,你应该认为密钥已经泄露。
或者,您可以将密码通过管道传输到正在重新启动的命令中(例如 echo mypass | service nginx restart
)。这将导致它以纯文本形式显示在进程列表中,不应被视为更安全。
我建议锁定该文件的权限,不要为其设置密码。我不相信 Ansible 有任何方法可以指定对个别提示的响应,除了 sudo。
Nginx 有 ssl_password_file
个参数。
Specifies a file with passphrases for secret keys where each passphrase is specified on a separate line. Passphrases are tried in turn when loading the key.
示例:
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
保存在 ansible-vault 中,复制它,重新启动 nginx,然后如果成功删除它。
我没有第一手经验,如果它真的有效或者这可能有什么其他副作用(例如手动 service nginx restart
可能会失败),但这对我来说似乎是一种合乎逻辑的方法.