【发布时间】:2013-03-05 00:17:01
【问题描述】:
当这些服务器通过我们的测试时,我客户的网站会按 IP 向他们的客户提供证书。此认证仅适用于经过测试的 IP。因此,我们需要成为提供证书的人,以便我们可以验证显示我们证书的站点是否确实经过了我们的测试。因此,当客户的用户单击证书的链接时,他们可以相信该站点确实经过了我们的测试(该站点没有由未经我们测试但声称是的另一台服务器提供服务) .
用户通过如下所示的链接被定向到我们的网站:
siteB.com/certificate.php?companyid=1234&serverid=4321
流程简化:
- 用户在站点 A 上
- 用户单击指向我的站点(站点 B)的链接以查看站点 A 的证书。
- 我的站点 B 需要验证确实是站点 A 正在尝试显示站点 A 获得的证书。
最初,我认为 $_SERVER 变量可能有一个值来指示引用服务器是谁,但我收到的发布问题的答案表明,虽然该信息存储在 $_SERVER["HTTP_REFERER"] ,不可靠(插件或用户可能会修改此值)。
由于我不能依赖它,我需要另一种方法来验证引荐服务器是他们声称的那个人。我考虑使用一次性使用令牌,但是有效的服务器可以简单地将令牌循环到客户拥有的其他服务器(尚未经过测试),客户可以通过这种方式声称他们的任意数量的服务器都经过认证我们只需支付一次测试的费用(以及损坏证书的完整性)。
我想知道这个问题是否不可能制定一个万无一失的解决方案,并且可以做的最好的事情是混淆不受控制的端点(客户的服务器)发布密钥以表明他们是证书的用途(例如,狡猾的客户必须阅读一些混乱的混淆 javascript,或反汇编闭源客户端程序以欺骗系统)。
到目前为止,我的想法是这样的(这很糟糕):
我需要制作一个闭源程序来运行客户端,可能通过Native Client 在单击客户网站(站点 A)上的证书链接时启动,这将首先使用我的站点(站点 B),然后打开与站点 A 的服务器、站点 B 的服务器和用户的 3 路通信线路,其中站点 B 将验证站点 A 是他们所说的那个人,然后返回给用户证书或说明无法加载证书的原因的错误消息(例如连接超时)。
站点 B 上向用户 NaCl 程序开放流的脚本将 use curl 获取站点 A 的服务器的 IP 地址并进行验证。
对我来说,这是一个非常粗糙的解决方案(如果它甚至是一个解决方案),虽然大多数用户不关心查看某人的证书,但让关心的用户经历了很多麻烦(安装和运行 NaCl程序)只是看证书简直是疯了。
这感觉有点像一个愚蠢的问题,但将其作为闪存运行会与运行 NaCl 程序一样安全/不安全吗?
当然,有更好的方法来做这一切......
【问题讨论】:
标签: php flash security networking google-nativeclient