格尔安全认证网关的Web系统开发规范
格尔安全认证网关的Web 系统开发规范v1.1上海格尔软件股份有限公司2004年12月 ,保密事宜:本文档包含上海格尔软件股份有限公司的专有商业信息和保密信息。接受方同意维
格尔安全认证网关的Web 系统开发
规范
v1.1
上海格尔软件股份有限公司
2004年12月
,
保密事宜:
本文档包含上海格尔软件股份有限公司的专有商业信息和保密信息。
接受方同意维护本文档所提供信息的保密性,承诺不对其进行复制,或向评估小组以外、非直接相关的人员公开此信息。对于以下三种信息,接受方不向格尔公司承担保密责任:
1 ) 接受方在接收该文档前,已经掌握的信息。
2 ) 可以通过与接受方无关的其它渠道公开获得的信息。
3 ) 可以从第三方,以无附加保密要求方式获得的信息。
上海格尔软件股份有限公司 i 上海市余姚路288号A 座4楼 Tel: (86-021) 62327010 Fax: (86-021) 62327015
URL: http://www.koal.com
,
目 录
1 规范描述..........................................................................................1 2 开发常见问题....................................................................................2
2.1
2.2
2.3 如何保证应用用户与SSL 连接用户的一致性?...........................2 http 与https 进行切换时应用如何保持用户session ?..................2 采用可选验证时,应用如何判断用户是否提交了证书?...............3 3 应用接口..........................................................................................4
3.1
3.2 接口描述...............................................................................4 接口实例...............................................................................5
上海格尔软件股份有限公司 ii
上海市余姚路288号A 座4楼 Tel: (86-021) 62327010 Fax: (86-021) 62327015
URL: http://www.koal.com
,
1 规范描述
SSL 安全网关能够对用户的数字证书进行验证,在浏览器与Web 服务器之间建立安全加密通道,可以为Web 应用系统提供用户身份认证和数据保密的功能。为了充分利用SSL 安全网关的安全功能,保证系统可操作性和性能,实现系统与安全网关的顺利结合,在Web 应用系统的开发过程中应注意以下几点: ² 系统中的用户标志设置必须以用户数字证书中的标志为基础。
² 用户身份的获取必须以安全网关提供为准,用户身份从cookie 中获取,系统
可以去掉登录页面。
² 在使用超级连接时尽可能使用相对链接,禁止使用HTTP 的绝对链接本地服
务,否则无法访问,本地服务用户只能通过HTTPS 访问。
² 避免使用协议的特有功能,保持HTTP 与HTTPS 的通用性。
² 不得使用KOAL_开头的cookie 作为有用信息,否则会被过滤。
² 避免使用过多的cookie 信息,建议不要超过1000字节。
² 对于网页中参数的传递尽可能以POST 方式,避免GET 方式。
² 在网页美观的前提下,保证网页的简洁性,尽量减少网页中的帧数和资源数
目(图片等),提高SSL 的连接性能。
² 减少使用重定向功能,避免使用多重重定向功能。
² 系统提供统一的固定端口对外提供服务,避免使用动态及多个端口。
² 对每个网页都必须对获取的用户身份cookie 与应用保存的用户session 值进
行对比,防止另一个用户使用未关闭的IE 进行访问。
² 若网页包含多框架或多窗口,则网页内容的获取应统一由HTTPS 方式获取,
避免混用其他方式(HTTP ,about:blank空页面等)获取,否则会提示网页包含不安全内容。
上海格尔软件股份有限公司 1 上海市余姚路288号A 座4楼 Tel: (86-021) 62327010 Fax: (86-021) 62327015
URL: http://www.koal.com
,
2 开发常见问题
2.1 如何保证应用用户与SSL 连接用户的一致性?
l 问题描述:
通过SSL 访问应用,提交用户证书并正确进入,此时在IE 不关闭的情况下更换用户证书,进行访问时会提示重新输入证书密码并验证,使用新的证书建立连接访问后,发现应用中的用户还是先前的用户,并没有与当前证书对应。(此种现象仅会在客户端实现较为完善,对硬件证书时刻监控的情况下才会发生,否则IE 还是采用原有SSL 连接进行,并不以新证书进行连接)。
l 问题分析:
通常用户session 有效期是与客户端进程关联的,由于IE 没有关闭,因此用户的session 继续有效,虽然SSL 连接已经发现用户发生变化,但应用还是根据原有的用户session 进行判断,导致应用身份与SSL 连接身份不一致。
l 问题解决:
在这种情况下,由于SSL 连接已经发现了身份变更,因此只要应用始终与SSL 连接的身份保持一致就可以了。实现的方法是:应用每次收到请求时都可以通过cookie 方式获取用户身份,然后将此身份与用户session 保存的身份进行对比,若发生变化,则重新设定用户信息。
2.2 http 与https 进行切换时应用如何保持用户
session ?
l 问题描述:
SSL网关保护部分Web 资源,具体方式如下,用户首先通过http 方式登录网站,在进行某些重要操作时候使用https 方式通过SSL 网关认证访问应用,此时Web 应用无法获取原有用户session 。
l 问题分析:
通常的用户session 是根据用户访问的地址来匹配的,通常是域名,但以上
上海格尔软件股份有限公司
上海市余姚路288号A 座4楼 Tel: (86-021) 62327010 Fax: (86-021) 62327015
URL: http://www.koal.com 2
,
应用方式对于客户端来说是两个网站(http 访问的地址与https 访问的地址不同),因此通过https 访问的时候客户端不会把先前的用户信息发送到第二个地址。所以,应用无法获取用户session 并不是SSL 网关将用户信息过滤掉,而是客户端根本没有发送用户信息。
l 问题解决:
通过以上问题分析,问题的解决其实就是解决不同网站(应用)间共用用户session 的问题,由于上述“两个网站”其实是一个,因此只要解决客户端发送问题就可以了。一种简单的方法是在切换https 的时候,在https 页面中加入隐含表单,在提交服务器之前通过客户端脚本将原有用户端信息自动填入,服务器通过获取隐含表单内容来判断用户,而不是简单的通过页面session 判断(页面session 肯定不一样)。
2.3 采用可选验证时,应用如何判断用户是否提交了证
书?
l 问题描述:
SSL 服务采用可选验证时,用户既可以提交证书验证,也可以不提交证书进行验证,都可以访问后台应用,应用如何区分用户是否进行了证书验证呢,是否可以采取应用获取证书内容的cookie 方式来来判断呢?即能够获取到cookie 就认为用户通过了证书认证,获取不到cookie 就认为用户未提交证书。
l 问题分析:
当用户提交证书验证通过后,SSL 服务获取证书信息并以cookie 方式发送到应用服务器,在加入证书信息的cookie 前,SSL 服务会对原有请求信息进行分析,若有相同cookie 名称的内容则进行破坏处理,保证应用获取的证书信息的正确性;当用户不提交证书信息时,SSL 服务无法获取证书信息,因此不会加入新的cookie 信息,当然也不会检查用户请求信息中的内容了,因此用户在不提交证书情况下完全可以在请求中伪造出相应的cookie 信息,而SSL 服务误认为是应用所需要的信息而不加处理,造成应用也可以获取到“证书内容的cookie ”,误认为用户已经经过了证书验证。
l 问题解决
上海格尔软件股份有限公司
上海市余姚路288号A 座4楼 Tel: (86-021) 62327010 Fax: (86-021) 62327015
URL: http://www.koal.com 3
,
为了避免应用的错误判断,SSL 服务在设定绑定cookie 的前提下,无论是否获取到证书信息,都在用户信息中加入名称为SSL_VERIFY_CERT的cookie 项,证书通过验证则cookie 的值为yes ,若为通过证书验证值为no 。因此,应用可以通过SSL_VERIFY_CERT来判断用户是否通过了证书验证。
3 应用接口 3.1 接口描述
SSL 与应用系统的接口以cookie 的方式实现,SSL 服务将证书及其他信息以cookie 方式发送到应用服务器,每一个cookie 的名称都有其确定的含义。cookie 名称的定义如下(假定): 序号
3. KOAL_CERT_DN 4. KOAL_CERT_O 5. KOAL_CERT_OU 6. KOAL_CERT_T 证书主题项值 证书主题O 项值 证书主题OU 项值 证书主题T 项值 组织 单位 职级 具体内容以具体CA 制定的含义为准
Cookie 名称
Cookie 值含义
应用含义
备注
11. KOAL_CERT_ISSUER证书颁发者通用名
_CN
证书颁发者组织名
_O
上海格尔软件股份有限公司
4
上海市余姚路288号A 座4楼 Tel: (86-021) 62327010 Fax: (86-021) 62327015 URL: http://www.koal.com
,
证书序列号
_NUMBER
证书序列号
14. KOAL_NOT_BEFORE 证书启用日期时间生效期
(
格
式:yyyy-mm-dd-hh-mm-ss)
15. KOAL_NOT_AFTER
证书失效日期时间失效期 (
格
式:yyyy-mm-dd-hh-mm-ss)
16. KOAL_CLIENT_IP
客户IP地址 不验证证书时为no
在服务为可选验证时需要
3.2 接口实例
下面提供Asp 脚本取cookie 的示例:
用户编码=<=Request.Cookies("KOAL_CERT_CN")>
用户姓名=<=Request.Cookies("KOAL_CERT_GN")>
客户IP=<=Request.Cookies("KOAL_CLIENT_IP")>
职级=<=Request.Cookies(" KOAL_CERT_T")>
EMAIL 地址=<=Request.Cookies("KOAL_CERT_E")>
上海格尔软件股份有限公司
上海市余姚路288号A 座4楼 Tel: (86-021) 62327010 Fax: (86-021) 62327015 URL: http://www.koal.com
5
,
组织=<=Request.Cookies("KOAL_CERT_O")>
部门=<=Request.Cookies("KOAL_CERT_OU")>
颁发者名称=<=Request.Cookies("KOAL_CERT_ISSUER_CN ")>
证书失效期=<=Request.Cookies("KOAL_NOT_AFTER ")>
用户证书=<=Request.Cookies("KOAL_CERT ")>
下面是jsp 脚本例子:
<@ page contentType="text/html; charset=GBK">
<@ page import="java.net.URLDecoder">
<
Cookie[] cookies = request.getCookies();
if(cookies == null)
cookies = new Cookie[0];
String name = "";
String value = "";
for(int i = 0; i < cookies.length; i )
{
Cookie cookie = cookies[i];
if("KOAL_CERT_CN".equals(cookie.getName()))
{
name = "用户标识:";
value = cookie.getValue();
}
else if("KOAL_CERT_G".equals(cookie.getName()))
上海格尔软件股份有限公司
上海市余姚路288号A 座4楼 Tel: (86-021) 62327010 Fax: (86-021) 62327015 URL: http://www.koal.com 6
,
{
name = "姓名:";
value = new String(cookie.getValue().getBytes("ISO-8859-1"), "GBK");
}
else if("KOAL_CERT_O".equals(cookie.getName()))
{
name = "组织:"; = value new String(URLDecoder.decode(cookie.getValue()).getBytes("ISO-8859-1"), "GBK");
}
else if("KOAL_CERT_OU".equals(cookie.getName())) =
{
name = "部门:";
value new String(URLDecoder.decode(cookie.getValue()).getBytes("ISO-8859-1"), "GBK");
}
else if("KOAL_CERT_E".equals(cookie.getName()))
{
name = "E-mail:";
value new String(URLDecoder.decode(cookie.getValue()).getBytes("ISO-8859-1"), "GBK");
}
else if("KOAL_CLIENT_IP".equals(cookie.getName()))
{
上海格尔软件股份有限公司
上海市余姚路288号A 座4楼 Tel: (86-021) 62327010 Fax: (86-021) 62327015
URL: http://www.koal.com 7 =