验证来自签名 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 请求的主要内容,如果未能解决你的问题,请参考以下文章

Java:使用自签名证书的 SSL 客户端身份验证

解析请求体禁止请求签名验证

如何验证 HTTP 重定向绑定的 SAML 签名

OneLogin SAML Authn请求签名验证工具是否支持HTTP-POST绑定?

使用keytool生成公钥私钥证书并且读取出来,使用私钥签名jar并验证(转)

如何创建一个自签名的SSL证书