我已经尝试了大约一个星期来设置一个HashiCorp Vault环境,但是由于无法将我的客户端证书转发到我的后端,所以我不得不设置最后一部分: HAProxy。
我目前在HAProxy上的设置是:
frontend vaultfrontend
mode http
bind *:8200 ssl crt /home/administrator/tls.crt verify none
redirect scheme https code 301 if !{ ssl_fc }
default_backend vaultbackend
backend vaultbackend
mode http
timeout check 5s
option httpchk
http-check connect ssl
http-check send meth GET uri /v1/sys/health
http-check expect status 200
server a.vault a.vault.test.local:8200 ssl verify none check
server b.vault b.vault.test.local:8200 ssl verify none check
server c.vault c.vault.test.local:8200 ssl verify none check我的后端保险库服务器正在运行带有Windows CA签名证书的SSL,并且通过它们各自的URLS运行得很好。HAProxy有一个签名的证书,允许人们通过这个URL:https://vault.test.local:8200连接到它,这个URL:https://vault.test.local:8200就像预期的那样工作。
当我试图通过HashiCorp Vault的Cert Auth身份验证方法访问Vault时,问题就出现了。每当我试图通过https://vault.test.local:8200 (即HAProxy )进行身份验证时,都会收到一条错误消息,表示请求中缺少客户端证书:({"errors":["client certificate must be supplied"]})'
然而,如果我直接以我的Vault服务器为目标的话,它可以很好的工作。
我尝试过编辑配置以包含以下内容:具有不同变体的http-request set-header X-Client-Cert %{+Q}[ssl_c_der,base64],但是它没有改变什么。在我看来,我真的很喜欢HAProxy,因为无论出于什么原因,我都不会接受从VaultSharp应用程序(C#)发送的X客户端证书并转发它。
有人有这样的设置吗?或者至少知道问题出在哪里?
发布于 2022-11-20 13:09:30
我终于解决了这个问题,问题是用HAProxy执行SSL-终止总是会导致客户端证书丢失(至少从我最后尝试的所有事情中)。
解决方案是执行SSL-传递,客户端证书将被Vault环境正确读取。
看起来会是这样的:
frontend vaultfrontend
mode tcp
bind *:8200
redirect scheme https code 301 if !{ ssl_fc }
default_backend vaultbackend
backend vaultbackend
mode tcp
timeout check 5s
option httpchk
http-check connect ssl
http-check send meth GET uri /v1/sys/health
http-check expect status 200
server a.vault a.vault.test.local:8200 ssl verify none check
server b.vault b.vault.test.local:8200 ssl verify none check
server c.vault c.vault.test.local:8200 ssl verify none checkhttps://stackoverflow.com/questions/73936861
复制相似问题