haproxy ssl 密码保护私钥

Nar*_*esh 7 ssl password haproxy private-key

用法:Haproxy 作为 SSL 终止

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

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

为了解决这个问题,我使用了 Expect 脚本,它会自动提供密码

自动填充密码的脚本

#!/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
Run Code Online (Sandbox Code Playgroud)

我计划使用 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
Run Code Online (Sandbox Code Playgroud)

sym*_*ean 0

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

要么您违反了安全策略的意图,要么您的安全策略是由实际上并不了解 IT 安全的剪切粘贴猴子维护的。

假设需要保护密钥,那么您可以选择如何实现它明显的解决方案是...

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

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