背景
当 SIGHUP 发送到正在运行的 nginx 主进程进行重新配置时,如果有密码加密的证书密钥,nginx(特别是 openssl 库)将要求输入,如日志中所示:
Enter PEM pass phrase:
由于没有输入句柄,这会立即失败并导致重新加载失败。
问题
有没有什么方便的方法可以知道 nginx 何时要求输入密码并输入密码?
想法
ssl_password_file
指令不是一个选项,因为它会在磁盘上留下痕迹。- 将 nginx 包装在另一个父进程中并在前台运行它会更好,但我担心这可能会给 nginx 增加一些不稳定。
- 所以我认为最好应该用一些Linux机制来解决。可能命名管道?但我认为命名管道需要Nginx的参与
答案1
有一个指令是用于此目的的:您可以将 NGINX 配置为使用存储在文件中的行分隔的密码列表,方法是使用ssl_密码_文件。 。
http {
server { server_name <fqdn|ip>;
ssl_certificate_key <pem_key>;
ssl_password_file <path_to_passphrase>
}
然后重新加载配置:
sudo nginx -s reload
请注意,您的密码文件只能由 root 用户读取。如果攻击者获得您的密码,也会造成安全漏洞。
答案2
我认为你应该使用 Hashicorp Vault (https://www.nginx.com/blog/protecting-ssl-private-keys-nginx-hashicorp-vault/)或替代方案。