CoSign 3.x 介绍及与 CoSign 2.x 的协议比较
想必您已经读过 《CoSign 2.x 协议介绍》 的博客,知道了 CoSign 2.x 协议存在的一个安全漏洞,可能会被人恶意利用,通过钓鱼的手段获取用户的权限。
CoSign 3.1.0 版本已经于 2010 年 1月4日发布。在 密歇根大学的CoSign网站 上 记载的 3.1.1 的发布时间有误,笔误写成了 2009 年1月(整整提前了一年)。不过这也正常,毕竟日历刚刚由2009年翻到2010,一下子有些适应不过来。
CoSign 3.x 版本,在协议上进行了彻底的改造,解决了 CoSign 2.x 的安全漏洞:
- 服务 Cookie 将不再由 Web 应用本身签发,而是在单点认证成功后,由单点登录服务器随机生成
- 单点登录随机生成的124位字串组成 ,通过 URL 重定向到 Web 应用所在服务器的特殊 url:/cosign/valid 进行校验,通过后,再设置服务 cookie。
- 跳转的 /cosign/valid 的 Web 地址,需要预先在单点登录服务器上配置好,不同的 服务 cookie 名称要有不同的 /cosign/valid/ 网址对应。
- 登录 cookie 和服务 cookie 的关联因此更为安全,因为服务 cookie 的随机数由单点登录服务器生成,而非应用本身
- 因此黑客在没有通过认证之前,无法得到 应用 cookie 值,也就无法通过“钓鱼”,来获得权限...
CoSign 3.x 协议原理
一个图片胜过千言万语。先来看看在官网上的示例图: CoSign 3.x 流程和 CoSign 2.x 有很大的不同:- 浏览器访问 Web 应用,将不再设置 Cookie。跳转到单点登录的 URL 中也没有 Cookie 值,只有一个孤孤零零的 cookie 名称
- 登录成功后,不但由单点登录服务器设置登录 cookie,而且还产生一个随机的 cookie 值,通过 query string 带给一个特殊的返回 URL
- 登录成功后跳转的 URL 不是跳转至单点登录服务器的原始 Web URL,而是在单点登录服务器针对 cookie 名称事先配置好的一个地址。这个地址的结尾一般是 /cosign/valid/
- 服务 cookie的签发是由 ..../cosign/valid 的 URL 地址在验证完毕 cookie 值有效性后,再进行签发。之后在跳转到应用URL
- 注意:如果由于配置错误,/cosign/valid 所在的域名和应用 URL 不一致,将导致循环重定向错误
CoSign 3.x 组成模块
CoSign 3.x 的模块组成和 CoSign 2.x 一致,但是作用却不一样:- Daemon:服务器。采用新的 cosign 通讯协议,除了用于 登录cookie 和服务 cookie的关联,cookie 的过期,cookie有效性查询等功能外,还负责产生 124 位的随机码,作为服务 cookie 的取值
- CGI:登录界面。除了用于提供登录的 WEB 界面以及进行口令验证外,重定向的地址是在服务器端配置的,cookie名字唯一对应的一个地址
- Factor:同 CoSign 2.x, 是外挂的身份验证模块
- Filter:Web服务器挂件,安装在 Web 应用所在的 Web 服务器上。不同于 CoSign 2.x 的是,不再负责产生随机数用于 服务 cookie,而是提供一个新的 URL 处理器,实现 /cosign/valid 的 cookie 验证和设置 cookie
CoSign 2.x 到 CoSign 3.x 应用迁移
重新设置 Cookie 名称,保证唯一性
在 CoSign 2.x 时代,服务 cookie 的名字可以随意选取,甚至不同的服务器可以使用相同的 cookie。例如群英汇研发组,每个人的笔记本的服务都可能配置成和北京研发的服务器做单点认证。 在 CoSign 3.x 中,必须要做到 cookie 名字和网站 URL 的匹配。对于一个 cookie,必须只有一个URL地址何其对应;一个网站倒是可以支持多个不同名称的 cookie。 在 CoSign 3.x 的服务器配置中,可以通过正则表达式建立 cookie 和域名URL的一一对应。如:service cosign-(.*)\.moon http://$1.moon.ossxp.com/cosign/valid 0 insecure-filter-1如名称为 cc.moon 的 cookie 会重定向到 http://cc.moon.ossxp.com/cosign/valid 的地址上。(BTW,moon.ossxp.com 是群英汇的月球分公司的域名,暂时尚未正式营业,被开发人员临时征用)
配置 /cosign/valid 地址
要为每个Web虚拟机设定一个特殊的 URL 地址:/cosign/vald。该地址用于 cookie 值校验,以及完成设置 cookie 和重定向任务。 需要在 Apache 虚拟机的配置中增加下面的内容:<Location /cosign/valid> SetHandler cosign CosignProtected Off Allow from any Satisfy all </Location>