验证来自签名 jar 的 http 请求
Posted
技术标签:
【中文标题】验证来自签名 jar 的 http 请求【英文标题】:Verify http requests from signed jar 【发布时间】:2015-06-28 01:32:22 【问题描述】:我正在为我的 web 应用程序编写客户端,并且我使用我的开发人员证书签署了发布 jar,我如何验证休息服务的请求来自我签署的 jar?
【问题讨论】:
你不能。任何拥有您签名的罐子的人都可以拆解它,因此,找出如何伪造此类请求。您可能会通过静态或动态混淆使其变得更加困难,但这只会增加一点障碍。另一方面,如果您试图在无法访问您的 jar 的情况下防御攻击者,则该 jar 可能包含用于签署其余服务请求的私钥。 您要解决的根本问题是什么?如果您编辑您的问题以包含该内容,我们或许可以提出替代解决方案。 @mkl 是对的。任何可公开访问且有人可以获取客户端的服务都可以进行逆向工程,并且在客户端在手的情况下,无法阻止某人找到您的私钥或其他保密机制。一般来说,尽量不要太担心应用程序正在向你的服务发送请求;担心 user 发送给他们的是什么。如果我已登录并通过身份验证,那么我使用您的自定义客户端还是 telnet 都没有关系。 相关:security.stackexchange.com/questions/86492 在添加赏金之前,您确实最好更新问题。如果您只想防御临时攻击者或脚本小子,则一定程度的混淆可能就足够了。如果您想防御专业人士认真试图克服您的障碍,它不会。因此,请更清楚地说明您的安全要求。 【参考方案1】:你不能。签名用于执行验证,这意味着它在服务器端。但是您想在客户端检查 http/rest 请求的签名。客户端没有这样的验证。
您可以向响应本身添加一些内容并在客户端对其进行验证,但同样,没有什么能阻止任何其他服务器发送相同的值并伪装成您的服务器。
您还可以向 jar 中添加一些行为特征(如会话 cookie),但同样,没有什么能阻止其他 jar 也模仿它。
【讨论】:
以上是关于验证来自签名 jar 的 http 请求的主要内容,如果未能解决你的问题,请参考以下文章
OneLogin SAML Authn请求签名验证工具是否支持HTTP-POST绑定?