近日接到一个需求,要求一台资源服务器不仅在可以暴露在公网环境下的同时,还要保证只接受并处理可信的http访问请求。
需求场景如图:
为了访问资源文件,用户需要首先访问某一台Frontend Server进行用户身份认证———所有的用户信息均由Frontend Server保存,Frontend Server认证通过后返回真实的重定向地址,用户再根据重定向地址访问Resource Server获取资源文件。
具体的使用场景正如上面所述,下面是我的思考过程...
为了保证资源服务器收到的是一个可信的重定向地址,在安全性上有三点考虑:
- 重定向地址必须是可信的,即不可以被伪造,必须是由某一台Frontend Server返回的重定向地址。
- 为了防止盗链或资源被采集,每个Frontend Server返回的重定向地址应具有时效性。这个可以通过在链接地址上增加时间戳实现,但前提是该时间戳不可以被伪造。
- 最后,在必要的情况下,还可以不去响应某一台Frontend Server返回的重定向地址,即认为某一台Frontend Server的重定向地址不可信、该Frontend Server不可信。这要求Resource Server能够及时标示一台Frontend Server为不可信服务器,并且该Frontend Sever服务器还不可伪造剩余可信服务器返回的重定向地址。
以上三点也可以总结为:防止公网用户伪造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收到该请求后
- 根据fstime判断该请求是否过期,过期请求直接返回。
- 根据fsid判断该Frontend Server是否可信,如可信再根据fsid获得服务器端保存的fskey。
- 使用相同的参数加密签名过程,Resource Server根据params,fsid, fskey, fstime生成签名字符串。
- 比较重定向地址传来的签名字符串signmsg与本地生成的签名字符串是否相同,相同则认为是可信请求,否则为非法请求。
2.使用对称加密算法保证HTTP通信可信。
Resource Server为每一台Frontend Server分配不同的Des密钥(fskey),Frontend Server使用对称加密算法对拼接后的传递参数进行加密des(params|fstime)
重定向地址链接:
http://res.com/fsid=***&desmsg= des(params|fstime)
Resource Server收到该请求后
- 首先根据fsid判断该Frontend Server是否可信,如可信再根据fsid获得每个Frontend Server使用的Des密钥fskey。
- 使用密钥对desmsg信息解密,解密失败直接返回。
- 根据解密后的fstime判断是否过期,过期直接返回。
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收到该请求后
- 首先根据fsid判断该Frontend Server是否可信,如可信再根据服务器端保存的非对称加密私钥解密rsa(key)。
- 根据key解密des(params|fskey|fstime)。
- 通过fsid获得服务器端保存的fskey,对比解密后的fskey,如果不相同则认为是Frontend Server伪造的非法请求。
- 根据fstime判断是否过期,过期直接返回。
以上三种方法第一种会暴露所有的明文传递参数,第二种貌似最方便但却有被攻破的危险,第三种有可能又会产生效率的问题。
由于没有进行过相关方面的开发,以上也是对平时了解有限的一些资料的总结,难免考虑不周。各位有更好的方法和建议吗?
分享到:
相关推荐
另外,还有一些URL文件,比如"火车网-火车票-火车票查询-火车时刻表-火车票价查询-酒店预订-租车服务-旅行社-天气预报.url"等,这些可能是一些示例链接,展示了网页加密在各种在线服务中的应用,如在线购票系统、...
1. 查看URL:可信站点的URL通常以https开头,表示该网站使用了SSL/TLS证书,数据传输加密。而http开头的网站可能存在数据泄露风险。 2. 查找安全锁图标:在浏览器地址栏中,如果看到一个小锁图标,意味着该连接是...
"公钥加密与PKI实验_加密解密_实验楼 - 实验楼.url"指向的链接可能是一个在线实验平台,提供实践性的教程,让学习者通过实际操作来理解公钥加密和PKI的工作流程。 总之,公钥加密、数字签名、公钥认证和基于PKI的...
3. "更多软件下载.url" 是一个快捷方式文件,通常链接到一个网站或其他资源,用户可以通过它找到更多的相关软件下载。 使用加密狗检测工具时,用户应注意以下几点: 1. 首先,确保加密狗已正确连接到计算机。 2. ...
虽然这里的方式并不是传统意义上的加密算法,但确实展示了一种简单的“编码混淆”技术,它可以用于隐藏特定数据或代码片段,使得简单的文本扫描无法轻易理解其含义。 尽管如此,我们需要明白,这种方法的强度很低,...
此外,压缩包中的"1001下载乐园.url"是一个快捷方式,指向一个可能提供其他软件下载的网站。这表明MagicFolder可能来自一个可信的软件下载平台,用户可以在这里找到更多类似的实用工具。 MagicFolder的优势不仅在于...
头部和载荷通常被编码为Base64URL字符串,而签名则是通过将编码后的头部、载荷和一个秘密使用哈希算法计算得出,确保数据的完整性和来源的可信性。 2. JSON Web Signature (JWS): JWS用于对JSON格式的数据进行签名...
在Web开发中,URL参数是传递信息的一种常见方式,但直接暴露在地址栏可能会导致信息被第三方拦截或记录。为了保护用户隐私和数据安全,开发者通常会采用以下几种方法来隐藏或加密这些参数: 1. **POST请求**:与GET...
标题中的“淘宝开发文档签名_md5加密java+c#.rar”表明这是一个关于淘宝API开发的文档,其中涉及到的主要技术是MD5加密,同时提供了Java和C#两种编程语言的实现方式。MD5(Message-Digest Algorithm 5)是一种广泛...
淘宝API的签名(sign)加密是安全访问淘宝开放平台(Taobao Open Platform, 简称TOP)的关键步骤。在使用淘宝客API SDK时,开发者需要正确实现签名算法以确保请求的有效性和安全性。这个过程涉及到一系列的技术细节,...
它通过加密和哈希技术,确保数据在传输过程中不被恶意修改。这一特性在诸如会话管理、URL短期令牌、JSON Web Tokens(JWT)以及任何需要在服务器和客户端之间安全传递敏感信息的场景中都极其有用。 首先,我们来看...
这些下载器通常会加密或者添加特殊的参数到下载URL上,使得它们只能通过对应的下载工具访问。转换工具的作用就是解析这些加密的链接,提取出原始的HTTP或FTP地址,这样用户就可以使用任何支持HTTP或FTP协议的下载...
在互联网上,有些资源为了防止非法传播,会采取加密或者分段下载的方式,这就需要用到像旋快迅地址解密3.0这样的工具来解析和合并这些分散的下载链接。 该工具的核心功能可能包括以下几个方面: 1. **下载链接解密...
综上所述,虽然原始文件中的信息并不具备明显的IT知识背景,但我们可以通过对邮件地址和URL等内容的分析,挖掘出与IT行业相关的多个知识点,包括网络通信协议、URL结构、数据加密与安全以及网络安全威胁与防护等方面...
它主要用于在应用程序中进行MD5、SHA-1哈希加密、Base64编码以及URL编码等。此外,Apache Commons Exec库用于在Java应用程序中执行外部进程。 以下是使用Apache Commons Codec和Apache Commons Exec在Java中执行MD5...
IP白名单是一种安全策略,只允许预先定义的可信IP地址访问API。这有助于防止未经授权的第三方尝试调用接口,降低被攻击的风险。 4. **限流**: 限流用于防止恶意用户或机器人过度使用API,导致服务崩溃。它可以...
认证性则是通过数字证书和可信第三方的认证方式来确认通信双方的身份,防止假冒身份的攻击。 SSL/TLS利用了公钥(非对称)加密技术进行身份认证和交换加密密钥,然后使用对称加密技术来加密传输的大量数据。非对称...
数字证书由权威的证书颁发机构(CA)签发,用于证明服务器是可信的。当浏览器访问一个使用HTTPS的网站时,它会检查服务器的证书是否有效和受信任。如果证书无效或不受信任,浏览器会发出警告。 9. **安全性**: - ...
首先,我们看到Kerberos协议,这是一种基于票据的认证系统,用来在不可信网络中进行安全认证,常见于UNIX系统和Windows系统中。Kerberos采用“票据授予票据”(TGT)和“服务票据”(ST)来实现认证,保证了认证过程的...
在安全赋能体系方面,包括了SAFELink安全接入产品族、安全设备/硬件/网关以及加密视频、5G组网、可信计算体系、认证体系、密钥分发体系和网络标识体系等。以下是该文档中主要知识点的详细解析: 一、商用密码在通信...