本文共 2239 字,大约阅读时间需要 7 分钟。
近日接到一个需求,要求一台资源服务器不仅在可以暴露在公网环境下的同时,还要保证只接受并处理可信的http访问请求。
需求场景如图:
为了访问资源文件,用户需要首先访问某一台Frontend Server进行用户身份认证———所有的用户信息均由Frontend Server保存,Frontend Server认证通过后返回真实的重定向地址,用户再根据重定向地址访问Resource Server获取资源文件。
具体的使用场景正如上面所述,下面是我的思考过程...
为了保证资源服务器收到的是一个可信的重定向地址,在安全性上有三点考虑:
以上三点也可以总结为:防止公网用户伪造URL地址,防止不可信Frontend Server伪造地址,防止过期URL地址访问。
由于Resource Server需要允许所有的公网用户访问,所以不能对Ip进行限制,并且一般情况下Resouce Server也不会与Frontend Server直接通信,因此只能通过URL的验证方式。Frontend Server在生成每个URL的过程中中应包括Resource Server为每一个Frontend Server分配的账户fsId、密钥fsKey以及记录当前URL生成时间的时间戳fstime。fsid必须明文传输,fsKey做为加密运算的一个常量不可以明文传输。 可以想到的有如下三种:1.使用自定的加密函数生成加密签名字符串。
加密函数将所有需要明文传输的参数以及当前Frontend Server使用的密钥fsKey做为参数并通过MD5转换后生成加密签名字符串,md5(encode(params,fsid, fskey, fstime))。 重定向地址链接:http://res.com/fsid=***&fstime=***¶ms=***&signmsg=md5(encode(params,fsid,fskey, fstime))
Resource Server收到该请求后
2.使用对称加密算法保证HTTP通信可信。
Resource Server为每一台Frontend Server分配不同的Des密钥(fskey),Frontend Server使用对称加密算法对拼接后的传递参数进行加密des(params|fstime) 重定向地址链接: http://res.com/fsid=***&desmsg= des(params|fstime) Resource Server收到该请求后3.同时使用非对称,对称加密算法保证HTTP通信可信。
Frontend Server随机生成key做为对称加密算法的公钥des(params|fskey|fstime),并使用Resource Server提供的公钥对key进行非对称加密rsa(key) 重定向地址链接: http://res.com/fsid=***&rsamsg=rsa(key)&desmsg= des(params|fskey|fstime) Resource Server收到该请求后以上三种方法第一种会暴露所有的明文传递参数,第二种貌似最方便但却有被攻破的危险,第三种有可能又会产生效率的问题。 由于没有进行过相关方面的开发,以上也是对平时了解有限的一些资料的总结,难免考虑不周。各位有更好的方法和建议吗?
转载地址:http://aekrb.baihongyu.com/