在 HA 代理中使用 aes_gcm_dec 解密 HTTP Header
Decrypting an HTTP Header with aes_gcm_dec in HA Proxy
我正在尝试使用 HA Proxy aes_gcm_dec 转换器,但至少可以说文档很少,而且我在社区中找不到任何关于它的使用示例。
我有一个客户端在 HTTP header 中发送 AES GCM 128 加密消息,如下所示:
curl -H "X-Routing-Key: e4+DM/EkJQl4jAAOxNtDZb4dd5Q=" localhost:8000
我正在使用 HA Proxy 解密 header 并将其以解密形式转发到后端服务器。这是我的前端配置:
http-request set-header X-Routing-Key %[req.hdr(X-Routing-Key),b64dec,aes_gcm_dec(128,4+6ONmgZoNex0arqdTr7bA==,Zm9vb2Zvb29mb29wZm9vbw==,4QMQhILaVLC9oxyB8hGoZA==)]
aead 标签目前在服务器上是硬编码的,基于我为生成加密秘密而编写的 simple python script。将来它可能会被客户放弃——与 nonce 一样。另外,请注意 aes_gcm_dec 转换器之前的 b64dec
转换器。我不确定是否需要它。我已经尝试了两种方法,但在当前设置中都不起作用。
当我尝试执行此操作时,HA 代理静默失败。 header 到达后端时设置为空字符串。即使调试冗长,HA Proxy 也不会记录任何内容,但显然有问题。有谁知道我在这里做错了什么?
我已经在 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'))
我正在尝试使用 HA Proxy aes_gcm_dec 转换器,但至少可以说文档很少,而且我在社区中找不到任何关于它的使用示例。
我有一个客户端在 HTTP header 中发送 AES GCM 128 加密消息,如下所示:
curl -H "X-Routing-Key: e4+DM/EkJQl4jAAOxNtDZb4dd5Q=" localhost:8000
我正在使用 HA Proxy 解密 header 并将其以解密形式转发到后端服务器。这是我的前端配置:
http-request set-header X-Routing-Key %[req.hdr(X-Routing-Key),b64dec,aes_gcm_dec(128,4+6ONmgZoNex0arqdTr7bA==,Zm9vb2Zvb29mb29wZm9vbw==,4QMQhILaVLC9oxyB8hGoZA==)]
aead 标签目前在服务器上是硬编码的,基于我为生成加密秘密而编写的 simple python script。将来它可能会被客户放弃——与 nonce 一样。另外,请注意 aes_gcm_dec 转换器之前的 b64dec
转换器。我不确定是否需要它。我已经尝试了两种方法,但在当前设置中都不起作用。
当我尝试执行此操作时,HA 代理静默失败。 header 到达后端时设置为空字符串。即使调试冗长,HA Proxy 也不会记录任何内容,但显然有问题。有谁知道我在这里做错了什么?
我已经在 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'))