我被要求看看在处理请求期间是否有可能解密报头。
具体用例是通过从请求中删除另一个头(如果解密的数据不是“正确的”)来响应头的解密内容。 encryption头中的数据正被用于validation客户端的各个方面。
我可以看到如何使用带有未encryption头部值的mod_headers轻松完成这项工作,但是我还没有find头部,解密和使用结果值的任何内容。
我错过了什么,或者这是不可行的?
你可以用mod_rewrite来做到这一点。 例如,假设/ path / to / decryption / script是一个接受其标准input的encryption标题值的脚本,根据值是否正确输出“好”或“坏”。
RewriteEngine on RewriteMap decryptmap ext:/path/to/decryption/script # Set environment variable BAD_RESULT if the header decryption fails RewriteCond %{decryptmap:%{HTTP:Header-to-decrypt}} bad RewriteRule .* - [E=BAD_RESULT] # Clear a header if the decryption failed Header unset Header-to-clear env=BAD_RESULT
您还可以在脚本的标准input中包含其他数据。 例如:
RewriteCond %{decryptmap:%{HTTP:Header-to-decrypt}_%{ENV:varname}_%{HTTP:Another-header}} bad
并让脚本将价值分开。 请参阅RewriteCond以获取可以使用的值types的列表。
外部程序将不得不在每个新的请求上运行,所以如果每个新的线路处理缓慢,性能可能会变差。
请参阅RewriteMap文档中的“外部重写程序”,了解使用外部重写程序时要注意的其他问题列表。
这应该是一个评论,但有点长。
在你的问题中,你没有解决的许多因素对于任何解决scheme的结构都是至关重要的,更不用说具体实施了。 你还没有意识到这一点,就会怀疑你提供的信息的准确性,理解问题的能力,从而解决问题。
但是,给你怀疑的好处…
除了encryption密钥之外,您还需要encryptionalgorithm,初始化向量和有效负载的编码。
您应该已经知道Apache无法解密数据,这意味着您需要将数据发送到其他地方,但是这引发了您试图获得成果的问题。 标题只是消息的附件,或者是标题中的消息。 如果是后者,为什么系统devise成这样工作呢?
您似乎试图独立于请求的处理来validation请求,这意味着mitm代理操作。 相反,这就引出了一个问题,为什么你要在Apache中解决这个问题,尽pipe它可以作为代理来运行,但主要是一个原始服务器。
你可以,例如,直接请求一个PHP脚本,并使用mcrypt或openssl来解密相关的头文件,然后创build一个新的请求到实际的目标,但有很多其他的方法来解决这个问题,这种方法是不适用所有可能的情况。