获取守护进程的输出和输入

获取守护进程的输出和输入

背景

当 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/)或替代方案。

相关内容