encryption - 在 HA 代理中使用 aes_gcm_dec 解密 HTTP 标头
问题描述
我正在尝试使用 HA Proxy 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 脚本。将来它可能会被客户端传递——与随机数相同。另外,请注意b64dec
aes_gcm_dec 转换器之前的转换器。我不确定它是否需要。我已经尝试了两种方式,但在当前设置中都不起作用。
当我尝试这样做时,HA 代理会默默地失败。标头到达后端时设置为空字符串。即使有详细的调试,HA 代理也不会记录任何内容,但显然有问题。有谁知道我在这里做错了什么?
解决方案
我已经在 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 输出包含密文、随机数和 aead 标签。在引用的 Python 中,它会是这样的:
print("X-Routing-Key: %s" % (base64.b64encode(b"".join([aesCipher.nonce, authTag, ciphertext]))).decode('utf-8'))
推荐阅读
- java - 如何找到正在打印 StackTrace 的位置?
- css - 如果整个页面变得固定,我如何在中间制作一个元素
- flask-sqlalchemy - 在 SQLAlchemy 数据库中创建多对多关系时的问题
- ray - ray[tune] 在哪里记录 `python-core-worker-*.log` 文件?
- string - 将字符串转换为两个字符并将两个字符反转
- r - 有没有办法在 R 中创建包含条件值的新 var?
- wordpress - 父页面与 Post_Type 具有相同永久链接的子页面
- flutter - URI 的目标不存在:'package:velocity_x/velocity_x.dart'
- typescript - 在 Ionic 3 上使用 MapQuest 方向路由时出现运行时异常
- sql - 计算总金额 PGSQL