SDK 服务端证书校验的问题
回 3楼jesuiszb的帖子
版主我理解你的意思是想说,服务端的资源是通过客户端进行各种授权和认证来达到保护服务端存储的用户数据的目的是吧。
但是我提的问题是:
客户端如果需要向服务端上传数据,但是对服务端的身份没有进行验证,那么如果不管我客户用什么样的授权或者别的手段来想服务端表明身份,只要客户端不对服务端进行校验,那么客户端要上传的数据就有可能被恶意截取。
举个例子:
有三个人服务端A, 客户端C,坏人H。
假设:因为服务端A是公开可以访问的,坏人H对服务端A的所有接口进行大量接口调用并学习和模仿服务端A的接口返回方式。
场景:坏人H通过非常规手段篡改了DNS服务器中Alilyun域名解析的IP地址,或者向外发布伪造的类似Aliyun服务的域名并解析到自己搭建一个伪Aliyun服务器。此服务器对外提供的接口全部仿造了aliyun的接口,对于所有的请求都使用假设中模仿和学习到的aliyun服务的返回方式。
结果:客户端C的请求错误的发送到了坏人H的服务器上,由于坏人H的服务器能够伪造所有的Aliyun服务的接口,并针对所有的请求都返回OK,那么客户端C除人为干预外很难发觉坏人H的服务器是伪造服务器;那么客户就有可能会把自己一些信息和数据上传到这个坏人H的服务器上。。。。。
再者,SDK的请求中都会带着签名信息,这个信息是可以直接以客户端C的身份去调用aliyun的各项服务的,SDK把这些信息发送给坏人H后,坏人H就可以以客户端C的身份为所欲为了。
至此,坏人H的目的已经达到。
如果有人说这是客户端自己配置的错误的域名或者域名服务器被篡改导致的问题,不能怪SDK;可问题是,httpclient本身是提供了证书校验的接口的,但是SDK对这个服务的证书校验选择了绕过,不去验证服务端的证书;
要说明一点,服务端证书这个东西,除非是私人签发的证书需要客户到通过导入私钥的方式进行验证外,可信机构颁发的证书是不需要私钥进行认证的;浏览器、操作系统以及JDK都可以对可信机构颁发的证书进行校验。这个证书一般价格也不菲,一般的坏人也没有这个能力弄到这种证书来进行恶意攻击。
所以,我认为此SDK对服务端的证书不做校验的处理确有不妥,且对于广大用户来讲有着极大的风险。
目前解决方案只有修改源代码进行定制。
-------------------------
回 5楼jesuiszb的帖子
OSS服务对外开放的链接都是 HTTP的吗
还是说是HTTPS 但是没有加载证书
-------------------------
回 7楼jesuiszb的帖子
版主 不知道你是不是在忽悠我。。
SDK里面设置protocol 为HTTPS的接口
阿里云对外发布的 域名用HTTPS也是可以连接的
按照版主的说法, 阿里云现在除了ECS都是HTTP (安全性都不深究了),那为什么我用HTTPS可以连接呢
-------------------------
回 10楼baiyubin的帖子
谢谢
请问这个问题什么时候可以修复呢
赞0
踩0