在HA代理中使用aes_gcm_dec解密HTTP头。

问题描述 投票:0回答:1

我正在尝试使用HA代理。aes_gcm_dec 转换器,但至少可以说文档很少,而且我在社区中找不到任何使用它的例子。

我有一个客户端,在HTTP头中发送了一个AES GCM 128加密的消息,像这样。

curl -H "X-Routing-Key: e4+DM/EkJQl4jAAOxNtDZb4dd5Q=" localhost:8000

我使用HA代理来解密这个头 并以解密的形式转发到后端服务器。这是我的前端配置。

http-request set-header X-Routing-Key %[req.hdr(X-Routing-Key),b64dec,aes_gcm_dec(128,4+6ONmgZoNex0arqdTr7bA==,Zm9vb2Zvb29mb29wZm9vbw==,4QMQhILaVLC9oxyB8hGoZA==)]

aead标签目前在服务器上是硬编码的,基于... ... 简单的python脚本 我为生成加密的秘密而写的。将来它可能会被客户端传上去--和nonce一样。另外,请注意 b64dec 转换器之前的aes_gcm_dec转换器。我不知道是否需要。我尝试了两种方法,但在目前的设置中都不奏效。

当我尝试这样做时,HA Proxy默默地失败了。当它到达后端时,头被设置为一个空字符串。即使在调试的情况下,HA Proxy也没有记录任何东西,但很明显是有问题的。有人知道我在这里做错了什么吗?

encryption haproxy
1个回答
2
投票

我已经在HAProxy社区的Slack聊天中提供了这个答案,但如果有人在Google上找到这个问题,你可以在HAProxy中做如下操作

http-request set-var(txn.enc) req.hdr(X-Routing-Key),url_dec,b64dec,bytes(32)
http-request set-var(txn.nonce) req.hdr(X-Routing-Key),url_dec,b64dec,bytes(0,16),base64
http-request set-var(txn.aead_tag) req.hdr(X-Routing-Key),url_dec,b64dec,bytes(16,16),base64
http-request set-header X-Routing-Key %[var(txn.enc),aes_gcm_dec(128,txn.nonce,5AbcQVztUg4LYr406puUkw==,txn.aead_tag)]

确保你的AES输出包含加密文本、nonce和aead标签。在引用的Python中,它应该是这样的。

print("X-Routing-Key: %s" % (base64.b64encode(b"".join([aesCipher.nonce, authTag, ciphertext]))).decode('utf-8'))
© www.soinside.com 2019 - 2024. All rights reserved.