用法: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 时都填充