haproxy ssl 密码保护的私钥

haproxy ssl 密码保护的私钥

用法:Haproxy 作为 SSL 终端

要求:我们的私钥受密码保护,我们不允许删除私钥的密码

问题:如果我运行以下命令,haproxy -f /pathtoconf则会显示密码提示,并且一旦提供密码,haproxy 就会启动

为了解决这个问题,我使用了可以自动提供密码的脚本

自动填充密码的脚本

#!/usr/bin/expect -f
set timeout 20
spawn nohup haproxy -f /opt/reverse-proxies/demo.cfg
expect "Enter PEM pass phrase:"
send "password\r"


expect_background
expect eof
exit

我计划使用 ansible-playbook 来自动化它,但我的问题是,是否有任何干净的方法来提供私钥的密码,我对此进行了一些搜索,但找不到任何相同的配置。haproxy 团队的一些声明称,他们计划提供一种干净的方法,但无法在 1.6 中实现,并计划在 1.7 中实现。我查看了 1.7 的发行说明,但找不到太多关于该主题的信息。haproxy 是否为私钥密码提供了任何配置,或者如果有人已经实施了一个很好的解决方案来解决这个问题,请您指导我这个方向。

我的示例配置

global
    log 127.0.0.1 local2 debug

defaults
  timeout connect 5000
  timeout client  50000
  timeout server  50000

#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend  main
    log global
    bind *:4000 ssl crt /tmp/server.2.crt.pem
    default_backend             app


#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
    log global
    mode http
    server  app1 127.0.0.1:4002

答案1

我们不允许删除私钥的密码……期望脚本自动提供密码

要么您违反了安全策略的意图,要么您的安全策略是由那些并不真正了解 IT 安全的“复制粘贴猴子”维护的。

假设需要保护密钥,那么在如何实现这一点上,你就有了一些选择。显而易见的解决方案是……

  • 将明文放在不同的主机上,并限制通过 IP 地址 / MAC 地址 / 客户端证书的访问(尽管后者会产生先有鸡还是先有蛋的情况)

  • (假设这是在 Linux 上)使用虚拟 HSM 功能在内核中存储密钥。您仍然需要在启动时填充数据 - 但不是每次重新启动 haproxy 时都填充

相关内容