2005年是个性化的一年,个人建站以拥有个性化空间是今年互联网的一个热点。众多博客网站抢摊中国web博客市场。国内三大博客“Blogchina”、“Blogcn”、“Blogbus”纷纷改版、扩容,MSNSPACE和YAHOO360横空出世,Qzone的受欢迎指数和用户量的不断飙升,甚至“Cyworld”——曾经创造30万美元月销售神话的韩国最大虚拟社区,天极网,都来染指中国博客市场。网络从群体化向个人化发展的趋势不可小觑。

  web博客风起云涌的同时,wap市场也毫不怠慢。各种手机博客网站以迅雷不及掩耳之势迅速窜入wap领域,纷纷推出个人建站系统。3GPP,手机博客,yywap,mozone,dwap,91wap,wapcn……各个摩拳擦掌,为能在这个博客年占有一席之地使出浑身解数。较之网络,手机媒体个人化程度更高,私密性更强,使用起来也更为便捷。因此,用户拥有属于自己的wap网站的期望值很高;但技术上,建立一个专业的WAP网站又必须熟练应用一定的WML标记语言和WMLScript脚本语言才能进行,这令希望拥有个人WAP网站的用户望而却步。还好技术壁垒是人们制造的,人们也有办法冲破它。2005年,wap个人建站已经不再是梦想!

  举例来说,依托于3G泡泡(3gpp.com.cn)的3GPP免费wap建站系统就是一座实现梦想的坚固桥梁!3GPP免费wap建站系统为wap用户开辟了一个功能强大、操作便捷的个人WAP建站平台。用户只需在互联网上进行简单的电脑操作,便可以拥有个性化的WAP站点,亲手打造一个属于自己的WAP家园,尽情展现自我的精彩创意,至酷至in!

  免费是3GPP手机建站系统最具吸引力的地方,3G泡泡郑重承诺,在本网站享受的一切服务均不收取任何费用!

  傻瓜式的操作平台,不需要掌握那些复杂的语言、难懂的程序便摇身一变成为建站狂人。

  注册、使用便捷、简单,免费获得独立二级访问域名,拥有你自己独创的二级域名,更可自由绑定访问域名,“天上地下”任意游走。

  绑定手机,更可通过WAP管理后台,随时随地管理自己的网站。

  可视化编辑界面,层次清楚,操作方便,一看就会,一点就通。

  你的空间你做主,绝对享有网站自主权。

  自由的建站方式,完全DIY,引爆一轮又一轮的头脑风暴。

  管理模块功能完善,支持文字、链接录入,图片、视频、和弦铃声的本地上传,以及图文混排内容的排版编辑。提供各种风格的个性模板。

  资源管理模块,内容包罗万象、素材丰富多彩。千余种图片、图标、铃声、文章、视频、软件任你选择。

  免费提供无限制的WAP空间,任意拓展你的wap疆土,你想占多少就占多少。

  强大的统计分析功能,能够对网站、栏目甚至内容的访问量进行实时统计,公开、透明。

  3GPP免费wap建站系统,不仅具备了手机个人网站的基本功能,让你可以随心所欲的发布自己喜欢的文章、图片、视频、铃声、软件,还专门为热情好客的你设计了留言板、聊天室和主题论坛,让你的wap友人,不管是熟悉的还是素未谋面的都参与进来,你也能真正享受一把“唯我独尊”的站主待遇;测试问卷模块,特别而有趣,想知道正和你聊天的wap友人是一个什么样的朋友吗?单评他自我介绍怎么能让你放心,没准这些稀奇古怪的测试真可以一举道破他最真实的一面!

  免费、方便、简单是3gpp个人wap网站的最大优势,新鲜、个人、个性是3gpp个人wap家园的最大特点。

  在即将到来的3G时代,wap上网将成为最为便利、快捷的浏览方式,而wap个人建站将成为最流行、最个性的自我展现方式。现在的你拥有自己的wap家园了吗?你的回答是否定的?那么你肯定落伍了!如果你是个紧跟时代大潮,不干被现实抛弃的弄潮儿,那么赶快登陆www.wappp.cn ,发挥自己的聪明才智,建造一个完全私人化的,个性鲜明的,绝无仅有的wap家园,为3G时代的来临做好第一手准备!

无论是因特网还是无线网络,安全总是一个十分重要的问题.可以说:没有安全,也就没有网络世界的繁荣.在本章中首先介绍有关安全的一些基本概念,包括密钥学,数字证书,数字签名,安全认证等等.然后再了解有关WAP安全的专题,包括服务器认证,WTSL,客户端认证等等.
数字证书
数字证书是一些用来标识和唯一确定在网络(例如:因特网)上的人和资源的电子文件.数字证书同样能够保证两个组织间的安全和可信任的信息交流.
打个比方,当某个人在其他国家旅行的时候,他的护照为他提供了一个身份证明,使得他可以在每个国家之间往来.数字证书提供了一个类似的身份证明.它是通过一个可信的第三方组织来发放的.该组织被称为Certification Authority(CA).和护照发放处的角色一样,CA的角色就是验证持有者的身份并且"签字",以防止身份被伪造或者篡改.一旦CA在证明上签字,持有者就可以向其他人,其他站点和其他网络上的资源出示他的证明,并建立加密的和可靠的信息交流.一个认证包括了持有者和CA发放的各种信息,例如:
持有者的名字以及其他可以唯一确定持有者身份的信息,例如:使用该认证的WAP服务器的URL,个人的E-Mail地址.
持有者的公开密钥.公开密钥可以用来加密送往持有者的敏感信息.
发放CA认证的组织名称.
一个序列号.
证书的有效期,也就是起止日期.
在创建这个证书的时候,这些信息都被CA以数字化的方式写在证书里.CA的签名就好像是信封封口处的一个防伪章.
数字证书是基于公共密钥密码系统的.公共密钥是成对地加密和解密密钥.这对密钥一个被称作公开密钥,另一个被称作私有密钥.在密码系统中,公开钥匙是指一个数值.加密算法将利用这个数值来改变原始的信息内容,使得这些内容无法被其他没有持有相应私有密钥的人所识别.
公开密钥可以自由地分发,并且不影响私有密钥的安全.但是持有者必须保护好私有密钥.既然这对密钥是成对工作的,那么只有相互持有对方公共密钥的人之间才能相互进行信息交流.
简而言之:一个数字认证安全地绑定了用户的身份和公开密钥,并且通过了第三方的CA认证.
密钥学简介
安全信息通过加密传输的方法已经有很长的历史了.其实,恺撒大帝就是最早将密码学应用到战争的人.他通过密码系统将作战命令传达给将军们.在今天,有一个关键的问题限制了密码学的发展,那就是钥匙的管理.在密码系统中,钥匙指的是一个数值.加密算法就是应用这个数值来改变原始的信息,或者从改变后的信息中恢复出原始信息.自然地,钥匙的管理指的就是在用户需要的时候为他们提供密钥的安全管理.在传统的密码系统中大多是对称密码系统,也就是加密密钥和解密密钥相同.在使用对称密码系统时,发送加密信息的时候无须担心被截取(因为截取的人无法破译信息).然而,如何安全地将密钥传送给需要接收消息的人是一个难点.这就是现在的公开密钥密码系统的一个优势.公开密钥密码系统的一个基本特征就是它采用不同的密钥进行加密和解密.使用公开密钥密码系统,公开密钥和私有密钥是成对的.而且公开密钥可以自由分发而无须威胁私有密钥的安全,但是私有密钥一定要保管好.通过公开密钥加密的信息只有配对的私有密钥才能解密.
在公开密码系统发明之前,来维护一个庞大的密钥管理系统几乎是不可能的.因为在采用对称加密密码系统的情况下,随着用户数目的增加,密码的需求量也随之增大.例如:对100个用户,可能需要维护5000个密钥;但是对200个用户,可能需要维护20000 个密码.如果只使用对称密码系统,那么密钥的维护即使是在小范围内都没有办法实现.
公开密钥密码系统的发明对一个大规模网络的密钥管理起了极大的推动作用.虽然公开密钥密码系统有那么多优点,但是它并没有提供一个非常完美的密钥管理解决办法.而且公开密钥密码系统的工作效率没有对称密钥密码系统好.另外公开密码的使用也带来了一系列的问题.例如:
"如何使用密钥只做一次加密文件,并将文件发送给不同的人 "
"用户如果丢失了私有密钥,如何打开他经过加密的文件 "
"怎么知道Alice的公开密钥是Alice的,而不是其他人的 "
"怎么知道公开密钥还值得信赖 "
现在一般都采取对称密码和公开密钥混合系统来解决这个问题.也就是使用公开密钥密码系统来传送密码,使用对称密钥密码系统来实现对话.例如:假设Alice和Peter相互要进行通话,他们是按照以下步骤进行的.
Alice想和Peter通话,并向Peter提出对话请求.
Peter响应请求,并给Alice发送CA证书(CA证书是经过第三方认证和签名,并且无法伪造或篡改).这个证书中包括了Peter的身份信息和Peter的公开密钥.
Alice验证CA证书,并产生一个会话密钥.将这个会话密钥,使用Peter的公开密钥加密,送往Peter
Peter接收到信息,并使用私有密钥恢复出会话密钥.
双方通过这个会话密钥会话.
会话结束,会话密钥也就废弃.
数字签名
为了更好地理解密码是如何在电子通讯中应用的,下面以一个发送电子支票的简单过程来讲解.
4.3.1 安全的电子版本
最简单的电子支票就是一个使用字处理器生成的文本文件,包含有你的银行应该给某个人付给指定的金额.但是通过电子网络来发送你的支票将遇到几个安全问题:
文件的保密性枣防止任何人截取和阅读文件;
文件的确认性枣以防别人创建一个类似的文件;
文件的可靠性枣防止你否认你创建了这个文件,银行需要担保;
文件的完整性枣既然某个人可以改变文件,你和银行都希望保持文件的完整性.
为了解决上面的问题,需要执行下面一系列的步骤来实现以上的目的:
4.3.2 电子签名
电子签名的过程是从创建一个数学上的总体检测(叫做哈希编码)开始的.这个哈希编码类似于文件的指纹.它唯一确定了文件特征.即使文件中有一个位有所不同,哈希编码也会大不相同.第二步就是创建签名,也就是使用用户的私有密钥来给这个哈希编码加密.那么如何被称作签名呢 当银行接收到用户的支票时,就可以使用用户的公开密钥来检查,解开哈希编码,然后使用同样的算法生成所收到支票的哈希编码.比较这两个哈希编码,如果相同就说明的确是该用户的支票.这是因为只有该用户拥有这个私有密钥能产生这样的签名.
4.3.3 保密与加密
一旦数字支票经过了数字签名,那么下一步就是对支票使用私有密钥进行加密.这一步一般是指使用对称密钥对文件进行加密.经过加密的信息在网络上传输时,即使被截获,没有密钥也是无法阅读所传输的文件.那么接下来就是如何向银行秘密地传送用户的对称密钥.
4.3.4 公开密钥的密钥传送系统
公开密钥密码系统常用来解决密钥的发送问题.为了做到这一点,用户必须使用银行的公开密钥给对称密钥进行加密.既然只有银行拥有相应的私有密钥.那么只有银行能知道用户发送的对称密钥.
为什么要混合使用公开密钥系统和对称密钥系统呢 最简单的原因就是公开密钥系统相对来说很慢,只适合小信息量的传递.而对称密码系统相对来说要快得多,适合于大信息量的传送.
4.3.5 整个过程
整个过程如图4-1与图4-2所示.
图4-1 发送过程
图4-2 接收过程
安全信任
任何一个安全系统都建立在信任的基础之上的.在系统的用户之间,这种信任可能表现为不同的形式.总的来说,不同形式的信任能解决不同的问题,减少某种情况下的冒险.采取哪一种形式的信任大多取决于合作方式.
在网络环境下,用户需要了解有两种最主要形式的信任:第三方信任和直接信任.本节将主要介绍这些概念并提供一些附加的信息,让用户来理解在给定的环境下,应该采取何种信任方式.
4.4.1 第三方信任
第三方信任是指使从来没有建立过联系的双方建立一个相互之间的完全信任(如图4-3所示).在这种情况下,双方都完全相互信任,因为他们有共同的第三方,并且第三方声明这两个人都值得信任.
第三方信任是一个大型网络基于公共密钥密码系统产品的基础.公共密钥密码系统需要操作用户的公共密钥.在一个大型网络中,寄希望于每个用户之间都已经建立了联系是不现实也是无法实现的.另外,这就意味着用户的公共密钥必须广为人知,并且持有该公共密钥的用户必须由第三方来保证其可信,防止冒充.事实上,用户完全信任由第三方发放的公共密钥,因为他们的组织以一种安全的方式拥有和运作着第三方证书代理.
一般来说,第三方证书代理就是指认证机构(Certification Authority,CA).
图4-3 第三方信任
4.4.2 认证机构
认证机构(Certification Authority,CA)是一个可以被信任的实体,它的中心责任是保证用户是可信任的.从某种意义上来说,CA就是政府护照发放机构的一个别名.护照是一个由权威机构发放的公民安全文件,保证公民和他所声明的身份一致.其他国家相信这个政府护照发放机构,同样会相信公民的护照枣这是一个典型的第三方信任.
类似于一个护照,一个网络用户的"电子身份证"是通过CA来发放的.这就表明用户是值得CA信任的.因此通过第三方信任,任何信任CA的人应该同样信任这个用户.
护照发放机构和CA都是政治和社会的混合体.在护照发放局的例子当中,政府要决定哪些公民是被认为是自己的公民并可以获得一个护照.同样的,CA也是一个组织,它决定了在网络这个政治实体中,哪些人是这个组织值得信任的,并可以给他们发放一个电子证书.
从实际的角度来看,一个护照发放部门可以被看作是一个授权安全文件的创造者.护照机构有一系列的设备将公民的各种信息(例如:姓名,相片,生日……)和护照捆绑在一起.这样使得护照很难被更改.然后,当某个人检查这个护照的时候,就可以假设这个护照的信息是真实的.当护照机构使用物理设备来创建安全文件的时候,CA使用计算机平台和算法来创建和验证一个网络用户的电子身份.特别地,CA创建电子"证书",其权威性和可靠性都是使用CA的私有密钥的电子签名来保证的.用户可以使用CA的公开密钥来验证CA电子签名的可靠性.
护照机构必须保证其物理设备创造的护照的权威性.同样CA的私有密钥的电子签名必须小心保护,这样才能保证其领域内的个体的高度可信.
在讨论证书之前,这儿有一个附加的网络安全信任概念,有点类同于护照发放机构.一个国家的护照发放机构没有权利发放其他国家的护照,而且一个国家只有一个护照发放机构.类似的,网络安全信任概念也具有信任域和唯一性,这个概念就是CA域(CA domain).CA域是指拥有该CA发放的证书的用户的团体.
4.4.3 电子证书
一个网络用户的证书和一个电子护照等价.因此,一个电子证书包含了可以用来检验和识别用户的安全信息,例如:一个证书包含了用户的名字.一个非常关键的信息就是用户的公开密钥.这个公开密钥是用来给证书的所有者加密数据或者是验证用户的电子签名.
考虑到信任的各个方面,有两个关键的问题与证书有关.第一个就是证书如何来保证证书内信息的安全.就是如何使别人相信证书内的姓名和公开密钥的确是证书的所有者.的确,如果没有这个保障,那么公开密钥系统早就完全瘫痪了.因为没有人能够保证他的数据或者签名一定是他真正指定的人才能打开.
为了在用户的公共密钥和用户的信息之间建立信任关系.CA采用了对这些信息使用私有密钥进行数字签名的方式来保证.CA的数字签名提供三种重要的安全方式来保证证书的可靠性.首先,一个有效的数字签名就保证了其可信任性.第二,既然CA是唯一持有这个私有密钥的实体,任何人可以校验CA在证书上的签名,保证只有CA能够生成这样的签名.第三,既然只有CA是唯一持有这个私有密钥的实体,CA无法抵赖它所签过名的证书.
既然证书是包含了CA的电子签名,那么第二个和信任相关的问题是关系到CA自己是否是值得信任的.如果我们把这个问题和护照发放机构联系起来,那么正确的解释就是如何衡量一个护照发放机构的可靠性.例如,一个公民进入一个国家A,他持有一个有效的B国护照,海关必须保证B国的护照发放机构是否值得信任.为了做出这个决定,A国海关官员将要检查现在的可信任国家的列表,就好像决定高级别的政治组织是否在所控制的边界内.
这个可信任的国家集合,在网络安全中被称作交叉认证域(Cross-certified CA domains).
4.4.4 交叉认证
交叉认证是指在两个CA认证机构之间交换钥匙信息的过程,这样使得双方可以有效地验证对方钥匙的可靠性(图4-4).实质上,交叉CA认证是第三方认证的一个简单意义上的拓展.在某个CA域内的网络用户将完全信任由自己CA通过交叉认证的其他CA域内的用户.
从技术角度来说,交叉认证包括在两个CA域之间创建交叉证书.当CA域X和CA域Y交叉校验的时候,CA域X实际上创建和签名一个包含了CA域Y的公开密钥的证书(反之也这样).接下来,在任一域内的用户都假设这两个CA之间相互信任,因而在一个域内的用户可以通过扩展的第三方信任来信任另一个域内的用户.
关于交叉认证,在安全地交换钥匙信息(在它们之间这是不冒风险的)方面还有更多的技术细节.既然交叉认证是拓展的第三方认证,那么在任何一个CA域内都将能和其他安全模式打交道.回到先前的护照的比喻,在没有考察对方的护照创造和发放的过程之前,是不可能申明对对方机构的信任.例如在建立信任之前,每个国家将会想知道对方国家是如何验证公民的身份并发放护照的.
在CA交叉认证的时候也有类似的情况.例如在交叉认证之前,两个CA都想知道对方的安全模式,包括知道对方人员的操作高级安全功能所能得到的信息.双方还要签订有关的法律文件.这个文件是一个安全手段,并签名保证这个手段将实施.
图4-4 交叉认证
4.4.5 直接信任
直接信任是指双方之间直接建立信任关系(图4-5).与第三方认证所不同的是允许双方直接建立信任而无须第三方的参与.直接信任的基础是在交换安全信息之前的个人关系的基础上建立的.在网络安全中,直接信任是指在两个独立CA域中的个人通过交换钥匙信息来建立他们的通信.因为这些CA域的代表之间还没有建立信任关系(通过交叉认证),因此用户必须通过个人关系来信任对方.
没有个人信任,交换钥匙信息是没有意义的.因为钥匙信息本身就不可以信赖.当直接信任应用于信息安全通信的时候,它的唯一责任就是双方都能保证他们能接受对方的信任条件.
当直接信任的时候,个人之间钥匙的交换是以个人关系之间强大的机制来保证安全通信的.
图4-5 直接信任
服务器认证
一个WAP服务器的WTLS认证是一个认证证书.它授权给确认的站点可以访问移动设备内的微型浏览器.当微型浏览器的用户想发送一个加密信息给WAP服务器时,微型浏览器将操作服务器的数字证书.这个证书包含了WAP服务器的公共密钥,微型浏览器将用来授权给确认的WAP服务器,并且使用无线传输加密协议(Wireless Transport Layer Security,WTLS)加密.
既然WAP服务器是唯一拥有这个私有密钥,因此只有这个服务器能够解密这些信息.即使信息通过因特网传播,它仍然是可信的,而且无法伪造的.
CA认证
CA认证是一个通过了CA认证的证书.CA认证就好像其他的电子认证一样,除了他们是自签名.CA认证是被用来决定是否信任由CA所签发的证书.
在护照的那个例子中,护照发放局将要验证有效性和你的权利,并且决定是否允许你进入.同样的CA认证是用来授权和验证WAP服务器的认证.当一个WAP服务器的CA认证出现在微型浏览器前面,微型浏览器将使用CA认证来决定是否信任这个WAP服务器的认证.如果服务器的认证是有效的,那么WTLS对话将被执行.如果是无效的,那么这个服务器的认证被拒绝,并且不执行WTLS会话.
无线传输安全协议
无线传输安全协议(Wireless Transport Layer Security,WTLS)技术是一种安全协议.它是被用来保证无线网络的安全通信和传输.WTLS将主要被用在微型浏览器和WAP服务器之间,并且将成为电子商务的主角.
WTLS协议使用数字证书在两个实体之间创建一个安全的秘密的通信"管道",典型的例子是一个移动电话和一个WAP服务器之间的通信.通过WTLS连接来进行传输的数据,是不可能在不知道的情况下被篡改或者伪造.
一个WAP服务器认证是如何应用在WTLS传输中的呢
假设Alice想使用她的移动电话连接到一个安全的WAP站点买点东西.
当Alice访问WAP站点时,手机里具有WTLS功能的微型浏览器向指定的WAP服务器发出"客户呼叫",请求建立一个WTLS连接.
WAP服务器响应Alice,并发还一个服务器证书.(里面包含了公共密钥)
Alice的微型浏览器将验证这个服务器证书是否有效,同时查看微型浏览器的数据库,检查在这些认证当中哪些是Alice所信任的.
如果证书是有效的,Alice的微型浏览器将产生一个会话密钥,并将这个会话密钥使用服务器的公共密钥加密传送给服务器.
服务器将用私有密钥解密信息,恢复会话密钥.在这个时刻Alice可以被保证两个事情:
她所联系的WAP站点是和申明中所说的站点是一致的.(也就是站点的身份是经过校验的)
只有Alice的微型浏览器和WAP服务器拥有这份会话密钥.
WTLS的"握手"——校验需要建立WTLS会话的双方——完成以后,一个秘密的通讯"管道"就已经建了.Alice的微型浏览器和WAP服务器之间在知道对方的身份和防伪的状态下,就可以使用会话密钥相互发送加密的信息.
服务器认证过程
为了说明WAP服务器的认证过程.下面将以Entrust公司的WAP服务器认证过程为例子.具体的情况请查看该公司的站点.
4.8.1 验证用户的权限
因为用户的组织名字将出现在用户收到的证书当中.在发放证书之前必须保证用户有权利使用那个名字.这是为了防止未经授权地在WAP服务器中使用用户所在组织的名字.
Dun & Bradstreet (D-U-N-S) 数字是一个最简单的办法来证明用户有权利在证书中使用这个组织的名字.在美国本土或其他地方,大多数组织都有D-U-N-S数字.用户可以在www.dnb.com查询他的D-U-N-S数字.如果用户没有D-U-N-S数字,可以免费在线索取一个.请按照图4-6填写D-U-N-S数字:
请在空白处记录你的D-U-N-S数字和企业类型.
D-U-N-S

企业类型

图 4-6 填写D-U-N-S数字
注意:在线的认证将会连接到Dun & Bradstreet站点,来确认用户所填的内容是否属实.
然后,用户用传真将他的权利认证交给Entrust.net.表4-1列出了需要提交给Entrust.net的文件.
表 4-1 提交文件
如果你的组织是:
将要提交:
公司,企业,股东,所有者
公司的注册文件;或者是经过有关方面盖章的股东证明或所有权的复印件
政府部门或机构
一封由部门总负责人签字的原始信件.信件中必须包括部门的相关信息和当时负责人所在的职位
非政府组织(NGO)
一封由主席,首席执行官,或者总管理人签署的申请信
大学
一封由所在院校的院长或者副院长签名的申请信.信中必须包含所在院校的信息
商业组织(DBA)
一份有关商业组织的注册文件,税务和纳税人证明,或者是官方相应的书面证明,表明你有权利使用这个组织的名称
一个这里没有列出的组织
请和Entrust联系商讨应该提交哪些文件

4.8.2 SSCR和域信息
在这一步,用户将要提供他的域名和签名证书(Self-Signed Certificate Request,SSCR)他可以选择你的证书有效期限,口令和指定WAP服务器所使用的软件.
1. 域信息
用户所收到的证书当中还包括他的WAP服务器的域名(例如:wap.entrust.net).这个名字包含了用户所在组织的名字.Entrust.net只能给那些拥有该注册名的用户发放证书.例如:当用户收到一个域名为wap.entrust.net的证书,那么他一定是entrust.net组织名字的所有者.
要想注册成为域名的所有者,可以查阅域名注册数据库(WHOIS database).WHOIS 数据库是由一个叫做网络信息中心(Network Information Centers,NIC)来维护的.每个NIC负责不同的顶级域名.例如:Network Solutions (http://www.networksolutions.com)保存了一系列注册.com,.edu,.org和.net的域名.表4-2列出了经常访问的NIC.如果用户的顶级域名不在里面,请查看http://www.uninett.no/navn/domreg.html.
表 4-2 查询域名
如果你的域名为:
请查看:
.com,.edu,.org或者.net
Network Sulutions
http://www.networksolutions.com/cgi-bin/whois/whois
.mil
U.S. Military
http://www.nic.mil/cgi-bin/whois
.au
Australia
http://www.aunic.net/cgi-bin/whois.aunic
.ca
Canada
http://www.cdnnet.ca/search/index.html
.fr
France
http://www.nic.fr/outils/whois.html
.de
Germany
http://www.nic.de/servlet/Whois
.it
Italy
http://www.ripe.net/db/whois.html
.mx
Mexico
http://www.nic.mx/cgi/whois
.uk
United Kingdom
http://www.nic.uk/whois.html
.jp
Japan
http://www.nic.ad.jp/cgi-bin/whois_gw
记录用户的域名以及注册所有者的名字和地址.如果用户需要申请多个证书,那么就需要记录每个域名及其所有者的信息.请按照图4-7填写信息.
域名

所有者

公司名

地址

图4-7 填写域名信息
2. 产生和递交一个WAP SSCR
自签名请求(Self-Signed Certificate Request,SSCR)包含用户的WAP服务器的公开密钥,当然还包括其他一些关于用户的服务器辨别名(Distinguished Name, DN)的信息.用户可以生成一个关于WAP服务软件的SSCR,并且在线将它提交给Entrust.net.当用户的申请被确认以后,所有的申请数据将打包到由Entrust.net发放的CA认证证书当中.
用户必须根据以下的指导来产生一个有关WAP服务文件的SSCR.当用户填写在线申请的时候,将SSCR粘贴到申请上合适的位置即可.如果用户的WAP服务是向ISP租用的,那么就由ISP提供给用户一个SSCR.在提交每一个SSCR只需要简单地在线申请表单中点击"Another Certificate",并粘贴SSCR到空白位置就可以了.
当用户产生一个SSCR时,一对密钥也就产生了.公共密钥放入到SSCR中并且提交给Entrust.net 认证.私有的密钥保存在用户的计算机里.用户一定要将私有密钥保存好,如果用户丢失或者损坏了私有密钥,将无法使用他的证书.
重点:私有密钥是一个十分敏感的信息.任何人得到你的私有密钥将有解密在你的WAP服务器上由WTLS保护的数据的可能.请采取适当的措施防止未经授权的人员得到该密钥.
3. 产生SSCR的技巧
当用户要生成他的SSCR时,将被询问整个组织的情况和用户的WAP服务器.这些信息将用来产生WAP服务器的辨别名(Distinguished Name,DN).用户按照以下的几点来输入信息:
国家代码:这个是两个字符的ISO标准缩写.它代表了用户所在的国家.例如:CH代表中国.
地区或者省份:这个名字是用户的组织总部所在的地区或省份.请输入全部的名字,不要使用缩写.
位置:这是用户的组织总部所在的城市名.
住址:这是用户组织的注册名字.这个名字必须和WAP服务器拥有同样的域名.不要简写组织名称,也不要使用以下字符: ~ ! @ # $ % ^ * / / ( )
单位:将要使用这个证书的部门或小组.
域名:这个名字是用户的WAP服务器将要使用的URL(例如,wap.entrust.com).不要使用其他字符,例如"*"或者" ", 并且不要使用IP地址.
4. 将SSCR粘贴到表单上
在将要上交表单的时候,只需要把以上内容粘贴到表单中,特别注意要在表单内容的前后加上"-----BEGIN CERTIFICATE REQUEST-----"和"-----END CERTIFICATE REQUEST-----"这两行以标志表单的开始和结束.在大多数情况下,SSCR和下面的事例类似:
-----BEGIN CERTIFICATE REQUEST-----
AAAACkZvckVudHJ1c3QIAIC4GoFpe7WH4OFMSGUL
IA6s4q1M/i61tUX3w38Ndl5LN72uVjXisXXCI5WT
aY3scejJK4Q6LByFSaY7XDDmkAPwr6gGKNAe56SL
ULXeA9R81DDFB+siSb/cEP74LrU4tkMBHPnuaFn5
q9XLof/ptAttACHJQ9HhrvverzQ2E8nrDQADAQAB
-----END CERTIFICATE REQUEST-----
重点:当用户生成SSCR的时候,提示输入用户所在组织的名字.请用户输入他和以前的权利提交中所使用的组织名称保持一致.如果不一致,将拖延用户的申请时间.
4.8.3 选择证书有效期
Entrust.net提供一年或者两年的有效期.这两种方式都提供十分有效的安全保障.但是许多客户选择两年期来减少与WAP相关的认证.
请按图4-8填写WAP服务器认证的有效期.
认证有效期

图4-8 服务器认证的有效期
4.8.4 选择口令
当用户想撤消证书或和Entrust支持部门联系的时候,都是需要口令的.所以用户必须选择一个口令,并将它填写在如图4-9所示的表格中.为了安全起见,请使用至少8个字符,并最好至少有一个小写字母,一个大写字母和一个非字母表的字符(例如"%"或者"!").一个好的口令是应该是易记而难猜的.
重点:如果用户要将口令写下来,请将它保存在一个安全的地方.
口令

图4-9 填写口令
4.8.5 输入用户的WAP服务器类型
用户要记录他的WAP服务器类型和WAP服务器的软件,这可以从以下列表(如图4-10所示)中选取:
WAP服务器

图4-10 填写WAP服务器类型
4.8.6 定制多个证书
在线申请多个证书是十分方便的,用户只需要点一下"Another Certificate"就可以输入下一个域名,SSCR,口令和WAP服务器.
4.8.7 选择联系人
在申请证书时,需要知道有关用户所在组织的四点内容:
一个用户所在组织的有权利申请证书的高级成员.这个成员将会收到证书的副本.如果在处理用户的申请的时候遇到某些更深层次的问题,可以与他取得联系.
一个技术人员将会收到这个申请书的副本,他将被通知证书的更新和升级.技术联系人一般是负责安装该证书到WAP服务器中的人.如果用户的服务器是由第三方的ISP在管理,那么应该在第三方中有人作为用户的技术联系人.
一个安全负责人,他应熟悉安全方面的事务,有关安全的信息和WAP安全警告将发送他.安全负责人可能和技术人员是同一个人.
一个付账的人.
根据以上组织的内容,在线申请证书时需要填写的表格如下:
授权人
需要按图4-11所示的内容填写名字,公司名,电话号码,职位名称,E-Mail地址.
名字

公司名

电话号码

职位

E-Mail地址

图4-11 填写授权人
技术联系人
需要按图4-12所示内容填写名字,公司名,电话号码,职位名称,E-Mail地址.
名字

公司名

电话号码

职位

E-Mail地址

图4-12 填写技术联系人
安全联系人
需要按图4-13所示内容填写名字,公司名,电话号码,职位名称,E-Mail地址.
名字

公司名

电话号码

职位

E-Mail地址

图4-13 填写安全联系人
账单联系人
需要按图4-14所示内容填写名字,地址,城市,省份或地区,邮政编码,国家,电话号码,E-Mail地址.
姓名

地址

城市

省份或地区

邮政编码

国家

电话号码

E-Mail地址

图4-14 填写账单联系人
4.8.8 确认
确认页将包含着用户每一步所输入的信息.这个页给用户提供了表单提交前验证所输入内容的机会.如果用户可以按"Edit"键对内容做修改.必须指出任何的应用错误将拖延申请的时间.
以下信息将显示在确认页上:
D-U-N-S 数字和企业类型
授权人
技术联系人
安全联系人
账单联系人
在附加的信息中,每个证书都将显示以下内容:
域名
辨别名
有效期
WAP服务器
4.8.9 签署文件
这一步要求用户阅读有关的条款.这些条款是Entrust.net针对每一个使用WAP服务认证的使用者.用户必须同意这些条款才能到达下一步.
4.8.10 付费信息
用户可以通过在线付费American Express,Visa和Master Card.发放用户的证书后才从信用卡里面收取费用.在收取费用之后,用户将收到一个在线的收.
当用户完成订购之后,用户将收到一个订购序列号,请记录这个号码.用户可以使用这个号码来在线跟踪申请的状况.
一旦用户完成了注册技术联系人和授权人,将收到一个E-Mail,通知他们,申请正在被考虑之中.如果用户的申请成功,E-Mail将包含一个URL,那儿有用户可以使用的WAP服务认证证书.请用户查阅他的WAP服务软件来指导如何安装证书,并启动WTLS.
配置Nokia WAP Server
4.9.1 Nokia WAP server v1.0从本地安装Entrust.net WAP Root 证书
本节描述了如何配置Nokia WAP Server v1.0,使得移动用户得到和安装本地的Entrust.net WAP root 证书.为了安全起见,root认证被选作为可靠的使用方式.
注意:本文假设移动终端已经配置好,并且可以访问Nokia WAP server.
配置Nokia WAP server有三个主要的步骤:
创建一个流量映射,让内建的文件服务组件(built-in file servlet,FileServlet)来处理本地的文件.
配置FileServlet,让它来处理Entrust.net WAP root 证书.
建立一个WML服务页面链接来操纵WAP root证书.
1. 建立一个流量映射
在任务栏中点击"Start"按钮,选择"Programs">"Nokia WAP Server">"Nokia WAP Server Manager".
登录到"Nokia WAP Server Manager",管理窗口就出现了.
从菜单条中选择"Servlets".
从"Servlets"菜单选择"Mappings".
"Servlet Mappings"控制面板出现.在这个窗口,用户可以为WAP服务器建立一个新的流量映射.默认的是所有的HTTP请求都由HTTT Manger来处理.HTTP Manger向Internet发送请求.对于本地安装的Entrust.net WAP Root 证书,用户必须创建一个新的文件请求到FileServlet.
点击"Create",一个新的"Mapping"对话框出现.
在URL一栏输入"http://myhost/".这里myhost是你的主机名.
从"Servlet"列表中选择"FileServlet".点击"OK"按钮.
至此,已经建立了一个新的映射.任何到WAP服务器的http://myhost/请求都将被引导到FileServlet.
注意:为了编辑映射,从"Servlet Mapping"窗口选择一个项目,并选择"Edit"按钮.当"New Mapping"对话框出现的时候,就可以编辑映射了.
在流量映射正确建立的情况下,必须在FileServlet中指定证书的文件类型.文件类型(MIME)必须正确配置,使得WAP服务器可以正确地将文件发送给移动设备终端.MIME文件类型就意味着文件中有root证书的内容.
2. 配置FileServlet
关闭所有的窗口和对话框,除了"Nokia WAP Server Manager".
从菜单中,选择"Servlets".
从"Servlets"中选择"File Servlet"."Servlet:FileServlet"对话窗口出现.
点击"Add" 按钮."Add Property"对话框出现.
在"Name"栏中输入".cer".
在"Value"栏中输入:"application/vnd.wap.wtls-ca-certificate".
点击"OK"按钮加入证书文件类型到FileServlet.
点击"OK按钮关闭配置"Servelet:FileServlet"对话框.
3. 加入一个Entrust.net root证书文件到用户的WML页面中.
增加一个WML页面,使得终端用户可以选择操作Entrust.net WAP Root证书文件.
以下的WML卡片例子包括了链接到Entrust.net WAP Root证书.
这个例子假设:
Entrust WAP Root 证书名字是EntrustRoot.cer
Entrust WAP Root 证书在WAP服务根目录中

Import Entrust.net root certificate:
(requires Nokia 7110/7190)
-CA Root

2000 Entrust Technologies

现在这台Nokia WAP 服务器就已经配置了证书,终端用户可以下载Entrust.net WAP Root证书.
4.9.2 Nokia WAP server v1.0从Entrust Web server安装Entrust.net WAP Root证书
本节描述了如何配置Nokia WAP server v1.0使得终端用户可以从Entrust Web站点下载并安装Entrust.net WAP Root 证书.
推荐在本地安装Entrust.net WAP Root证书以避免一些安全隐患.
注意:本文假设移动终端已经配置好,并且可以访问Nokia WAP server.
配置Nokia服务器有两个主要步骤:
创建一个流量映射,让Nokia WAP server HTTP Manager处理HTTP流量.
创建一个WML页面连接,使得终端用户可以从Entrust.net Web站点下载Entrust.net WAP Root证书.
1. 创建一个流量映射
HTTP流量映射是Nokia Web Server默认的映射.这个映射创建的过程在这里是一个参考.如果映射在用户的Nokia WAP Server并不存在,执行以下过程.否则跳到下一个步骤.
在任务栏中点击"Start"按钮,选择"Programs">"Nokia WAP Server">"Nokia WAP Server Manager".
登录到"Nokia WAP Server Manager",管理窗口就出现了.
从菜单条中选择"Servlets".
从"Servlets"菜单选择"Mappings".
"Servlet Mappings"控制面板出现.在这个窗口,用户可以为WAP服务器建立一个新的流量映射.默认的是所有的HTTP请求都由HTTT Manger来处理.HTTP Manger向Internet发送请求.对于本地安装的Entrust.net WAP Root 证书,必须创建一个新的文件请求到FileServlet.
点击"Create",一个新的Mapping对话框出现.
在URL一栏输入"http://www.entrust.net".
从"Servlet"列表中选择"FileServlet".点击"OK"按钮.
至此,已经建立了一个新的映射.任何到WAP服务器的,且与所输入的URL相符合的请求都将被引导到FileServlet.
注意:为了编辑映射,可以从"Servlet Mapping"窗口选择一个项目,并选择"Edit"按钮.当"New Mapping"对话框出现的时候就可以编辑映射了.
2. 加入一个Entrust.net root证书文件到用户的WML页面中
增加一个WML连接页面,从而可以连接到Entrust.net 站点,并下载Entrust.net WAP Root 证书.
以下是一个简单的例子:

Import Entrust.net root certificate:
(requires Nokia 7110/7190)
- CA Root

2000 Entrust Technologies

这样,Nokia WAP Server就配置好了,用户终端可以下载Entrust.net WAP Root 证书.
认证证书管理
从安全的角度来考虑,WAP最重要的方面就是无线传输安全协议(Wireless Transport Layer Security,WTLS).WTLS是SSL的一个近亲.WTLS用户使用两种证书:
WTLS服务器证书,是WAP1.1的一个部分,是用来验证WTLS服务器到WTLS用户(手持设备)并且提供一个通过密钥加密的客户服务对话.他们和SSL服务器认证很像,有两点不同的是:1)X.509证书用于SSL.WTLS使用一个小型化的证书.该证书和X.509很像,但是更加简单小巧. 2)WAP服务器认证是强制的,而SSL服务器认证是可选的.
WTLS客户端认证,WAP1.2的一个部分,是用来验证一个WTLS用户(手持设备)到服务器的.它可以是X.509证书,或者是小型证书.
WAP 1.2也定义了一个基于PKI的功能,但是却不是WTLS部分.这个功能允许WAP客户端对一个事务处理,进行数字签名.或者被称作WML Script SignText功能.这个功能是为那些不需要名誉保证的用户来使用的.
在无线的网络中一般不会遇到像有线网络中网关的配置问题.一个无线网关,典型的是一个网络服务的提供者,为提供无线环境和有线Internet之间提供连接.网关就好像是一个内容的传输者.从安全的角度来考虑,无线网关可能执行一个即时的安全功能,例如将WAP/WTLS转换成HTTP/SSL.
对于服务或者网关的证书,微型证书(mini-certificate)的格式非常重要.这些证书需要在无线网络中传输,需要在具有有限资源的无线用户端进行处理.既然是这样,VeriSign提供了一种WTLS微型证书来保证WAP服务/网关.VeriSign现在正在和不同的WAP服务和网关提供商合作,包括:Motorola,Nokia和Phone.com,从而保证那些厂商能很顺利地处理安全过程.这个服务包括新客户的免费试用以及一系列的WAP/WTLS解决方案.
电子商务应用需要有证书撤回功能,来避免当服务器的证书安全被危及的时候,或者失效的时候,用户无法知道自己正在和一个"流氓"服务器进行事务处理的情况.VeriSign提出在产业界一种广泛使用的构架方案.这个方案能方便地识别那些证书已经失效的服务器.
WAP服务器/网关证书是基于移动用户设备的处理.就现有的资源和带宽,它不可能像在有线世界中那样,能在本地进行证书失效处理,例如:证书失效清单(Certificate revocation lists,CRLs)或者在线的证书状态协议(Online Certificate Status Protocol,OCSP).那么,VeriSign为用户提供一种短期的证书服务,来保证证书撤消服务.当网关或者服务器拥有了证书(例如:一年)以后,那么除了证书以外还应该包括一对在证书时间内有效的密钥.但是不同于简单地发放一个一年期的证书,证书可以发放一个新的短时间的证书,或者说可能是在一年的每一天发放一个25小时证书.那么服务器或者网关就使用那个短时间的证书来与客户建立会话.如果证书的所有者想撤回服务器或者网关的证书,只要简单地停止发放短期证书就可以了.客户将再也无法得到当前有效的证书,因此也会停止认为这个服务器是有效的.VeriSign将在2000后期推出该服务.
一个在无线网络上操作Web Server的可选择方案,是在无线网络浏览器中使用HTTP/SSL,这避免了在无线网络中承担起大量的证书和检验SSL服务器证书的难度.后来的解决办法就是在SSL路径上增加一个网关功能.那就是将SSL服务器证书换成短期微型证书.一个经过改造的微型浏览器的用户可以在使用SSL证书的地方使用微型证书.但是服务器仍然是标准的SSL服务器.
同样的技术可以用在代码签名和内容签名方面.一个网关粘贴上一个短期的微型证书来对事物签名.用户可以使用微型证书来验证签名的有效性,而不需要附加有效期检测.
除了支持WTLS服务/网关, VeriSign的短期微型证书服务将可以用来支持以下功能:网关支持的SSL功能和网关支持的数字签名功能.
客户端认证
电子商务经常需要用户对事务处理进行签名.数字签名支持无名誉保证,或者有疑义的事务处理.WAP WML Script SignText功能为这些WAP用户提供了这样的数字签名.同电子签名功能一样,这个功能可以被应用于其他无线设备,或者是手持设备,或者是内嵌SIM 智能卡.
VeriSign 赋予以下的PKI支持电子签名.无线用户包含了一个私有密钥和数字签名逻辑,但是无须存储或者处理相应的公共密钥证书.这个证书可以保存在构架中的一个目录或者其他形式的存储设备中.当用户电子签名需要被验证的时候,可以从那个地方提取用户的证书.通过这种方式,无须考虑证书的大小.因此标准的X.509格式证书,也可以在无线网络中应用.这个方式的好处是,服务器在同一个地方完成无线或者有线用户的签名校验.
无线用户证书将有VeriSign证书管理服务和相关的VeriSign服务提供产品,并分发到一个存储的地方,还能够在有线构架中使用.证书可以保存在用户的设备或者SIM卡中.这个证书的分发和管理与普通的有线证书的分发与管理没有什么不同.只是要做不同的开发功能.VeriSign愿意提供在不同平台下的应用工作.
在电子商务中,除了无线用户需要验证自己所连接的无线网关(典型的一个无线服务提供者)或者一个应用服务器(可操作的,例如,一个银行或者股票代理)外,同样对于银行来说,也要强烈地要求它的用户必须保证自己身份的正确性.银行一方不会把它的用户作为服务提供者需要第三方的认证.
在WAP环境中,在WAP1.2中提供用户—网关验证.用户—网关验证需要一个在WTLS之上的应用.VeriSign赋予标准的WAP WML Script这个功能,就像SignText功能.实质上,该功能将向服务器签名发送一份从服务器来的询问.
PKI支持客户端的验证其实质和客户端数字签名一样.X.509格式的证书可以在VeriSign 站点或者相关的VeriSign服务提供产品上发送.而且可以存储在有线构架中,或者是用户的设备中,或者是SIM卡.
Telepathy解决方案
4.12.1 简单介绍
随着新世纪的到来,人们希望能随时随地得到有关个人和商务的信息.随着Internet从桌面转移到无线设备,移动商务的需求将不断增加.安全的通讯和交互手段将使得移动商务有更广阔的天地.
移动商务被称作新世纪的经济增长点.它蕴藏了WWW和无线通信的最新科技.无论Web的功能将会变得多庞大,但它始终将人们与台式电脑捆绑在一起,有时间和地点的限制.无线设备使得人们能够移动地进行交互,通讯和联系.今天已经有超过两千万的无线用户.预计到2003年,将超过10亿.我们可以想象与客户在任何时候,任何地点进行商务处理;想象一下一个用户从未使用过计算机(或者太忙而没有时间来使用),却每天使用着移动电话;想象每个这种设备都有一个Web接口能接入到移动商务上,可以从产品选择的角度,价格的对比,定单的跟踪,一直到最后的购买.到那个时候网络才真正实现全球化.
在移动商务中,安全是核心的问题.用户和商业合作者都必须知道在空中传播的信息是受到保护的——无论是信用卡号,个人资金账号,交易密码或者是商业文件.因为谁都不想在一个不可信任的环境中做商务.这是因为不知道是否有人能够监听,不知道你打交道的人是不是真正你想联系的人,不知道所传送的信息是不是正确的而且可以供将来的验证.
移动安全的四个要素是:
保密性枣知道通信是保密的;
验证性枣知道谁在和你交谈;
完整性枣知道所发送的信息是正确的;
无法抵赖枣知道合同是能得到法律保护的.
只有当所有的四个要求都达到的时候才有完整的安全可言.这就是Baltimore Telepathy椧桓鐾暾陌踩辜芪尴哂没峁┑脑銮糠瘛 /FONT>Baltimore Telepathy是在电子商务安全中所需要的一切.
Baltimore Telepathy提供:
保证端到端的无线安全产品套装;
一个基于标准的开放构架来保护用户的投资;
一个成熟的合作程序来分发完整的移动商务解决方案;
一套完整的解决方案达到用户所需要的安全需要.
完整的商务安全
Baltimore Telepathy是一个完整的端到端的安全移动电子商务解决方案.它使得移动用户通过安全的通讯和事务处理连接到一个公司现有的电子商务和IT系统上.Baltimore Telepathy环境包括为移动用户,网络操作者和电子商务设计的所有安全产品:
软件开发工具建立安全会话应用;
网关解决方案提供在移动电话和Web/WAP服务器之间不可攻破的安全连接;
完整的数字证书方案来解决数字信任确认;
数字签名工具使得可以进行无线处理过程的数字签名.
4.12.2 技术特点
开放的构架
Baltimore Technologies是开放的,标准的,这使得用户可以在不需要改变现有的安全构架的前提下保证新分发系统的安全.Baltimore Telepathy产品同样能和Baltimore现有的有线解决方法有机地结合在一起,并且考虑了扩展现有的公开密钥构架(Public Key Infrastructure,PKI)安全系统来适合新的移动用户.
In-Depth技术
Baltimore首先将实验室的技术变成为产品.只有使用最新的技术,才能保证将最新的商业安全技术应用到无线应用中来.
公开密钥构架
整个方案的核心是公开密钥系统(Public key Infrastructure,PKI)枣Web,email,VPN,付费和现在的无线系统的安全基石.基于数字证书和加密密钥,PKI提供一个在分布式网络中高度规模化,并且可管理的用户验证手段.在PKI系统中,应用程序使用CA发放的数字证书将信息机密发放给其他基于PKI的应用程序.
Wireless Application Protocol – WAP
WAP (Wireless Application Protocol)是一个无线Internet的标准.它是基于Internet并且对于具有很多限制(带宽,处理器,显示器等等)的无线设备来说是很适合的.WTLS(Wireless Transport Layer Security)将 SSL(Secure Sockets Layer)应用到无线网络上来保证对话之间的安全.
只有Baltimore将所有的技术结合到一个复杂的框架中.现在电子商务已经拥有了能够保证他们安全的工具来保证无线电子商务的安全,并且系统集成可以利用现有的产品来为移动设备环境创建新的安全环境.
4.12.3 产品套装
完整的移动商务方案
Baltimore Telepathy可以为在无线网络中的每一个人提供安全保证.开发者可以混合或者匹配各个产品的功能来提供一个完全合适的安全构架系统.这些产品既可以创建今天高级的安全系统,也同样适用于未来新的无线技术(例如:WAP 1.2 和1.3).
Baltimore Telepathy WAP Security Toolkit
Baltimore Telepathy WAP Security Toolkit(WST)是一个具有强大功能的开发工具.它使得用户可以创建在线的安全加密会话应用.W/Secure包含了一套Wireless Transport Layer Security(WTLS),使得开发者可以为WAP应用建立完整的加密功能.
Baltimore Telepathy WAP安全网关
Baltimore Telepathy WAP Security Gateway (WSG)提供端到端的安全解决方案.它为那些需要从移动电话到Web/WAP服务器的用户,提供了整个路径上的安全保证.它能与WAP移动电话工作,并且能够以最快的方式建立用户的电子商务.它提供WTLS验证,加密的全过程,并且是一个独立于WAP 网关/服务器的应用.它可以通过配置来重新引导WAP流量到任何其他的WAP服务器或者网关.
Baltimore Telepathy WAP Certificate Authority
Baltimore UniCERT已经扩展到WAP数字证书(WTLS证书).用户需要这些证书来验证WAP网关和移动设备和服务.Baltimore Telepathy WAP Certificate Authority(WCA)扩展到一个更广的领域,使其成为UniCERT的一个可插入模块,使得它既适合于有线世界的用户也适合于无线世界的用户.
Baltimore Telepathy WAP证书
发布安全内容到移动设备的核心是向移动用户证明你的身份.WAP Server证书,也称为WTLS 证书,是作为Telepath的一个部分.
Baltimore Telepathy PKI注册系统
一个强大的注册系统使得无线用户可以有机地进入到Public Key Infrastructure(PKI). Baltimore Telepathy PKI Registration System(PRS)在无线网络中为移动设备的用户提供了他们的数字身份.它提供了将移动设备用户捆绑到数字证书的技术,使得用户能验证自己的身份并参与到移动商务中来.因此,这个系统可以应用到WAP和GSM/SIM移动电话.
Baltimore Telepathy PKI 效验系统
这是唯一的数字证书获取和验证系统.它适应低带宽和存储的要求,是专门为无线环境而设计的.Baltimore Telepathy PKI Validation System(PVS)只存取和验证证书的身份,而不是整个证书,使得用户可以操作多个证书,而不需要存储他们.
Baltimore Telepathy Digital Signature Toolkit (DST)
这是一个强大的开发工具,内容提供者可以建立一个系统来处理无线的数字签名.它是整个安全的核心.只有通过数字签名才能保证移动商务的权威性,保密性,完整性以及使其无法抵赖.WAP 1.2协议在WML中的有数字签名,这样内容提供者就可以接收到从移动设备传过来的用户签名,以及使用PKI来验证.
Baltimore Telepathy使用Public Key Infrastructure (PKI)构架来为电子商务和移动商务提供安全保证.Baltimore Telepathy构架可以很容易地集成到新应用中.
Baltimore Telepathy是完全和Baltimore UniCERT PKI构架兼容.标准的 Baltimore UniCERT模块和系统可以扩展到整个Telepathy基于无线的安全系统中.
WAP安全
1.WAP的安全性
在WAP安全性的实现上,我们需要以最小的代价获得最大的利益.WAP论坛的一个目标就是不进行"重复发明".他们希望利用一切现存的技术,包括使用Internet技术作为模型,因而与Internet和Internet协议的一致和互用就成为一个重要目标.如同Internet一样,WAP的安全性也是在传输层实现的.外观上唯一的区别是:Internet模型将它的多数安全特性在TLS中实现,而WAP则在WTLS中.协议的命名可以给我们提示:WTLS与TLS很相似,而且WTLS是以TLS为基础的.然而,在实际的网络配置中,它们有着微妙的不同,这些不同对于安全性有很重要的含义.
为了阐明这种区别,我们需要看看在WAP环境中通信是如何进行的.图1是一张类似于Internet通信模型的图解.
图1 WAP通信模型
在该模型中,连接仍然是通过电话呼叫建立的,但是此时的连接是由网络运营商而不是ISP进行处理的.在实际中并非必须这样实现,但是它代表了多数的通信模型,因而我们在讨论中只以该图为参照.同Internet模型一样,当运营商接收到电话呼叫时,会将其路由到它的某个调制解调器上,进而连接到RAS服务器.
WAP论坛曾经指出移动设备应该使用PPP协议,但是这里的PPP本身只是OTA业务承载协议及其它相关的处理移动电话呼叫的协议的一个"隧道".通信时,在手机与基站之间有一层加密机制,该加密机制与PPP或其它高层协议是无关的.这种加密被定义为GSM的一部分,虽然该附加的安全层使得电话窃听变得较为困难,但是它并不是足够健壮,而且不能保护范围只限于基站之内,所以它本质上并不能提供安全的连接.
同Internet模型一样,RAS服务器进行认证处理,但是同Internet模型不同的是,当数据包通过RAS服务器之后,它并没有经过Internet被路由到WEB服务器,而是被路由到了WAP网关.WAP网关负责WML,WMLScript与适合于无线传输的二进制格式代码之间的转换,同时,它也作为手机的代理,代表手机用HTTP 1.1协议与WEB服务器通信.WEB服务器并不知道它在和WAP网关对话,它只是将WAP网关看作另一个客户机设备.
一般作为信息服务的WEB服务器是网络运营商所有的,因而数据包可能从未离开过运营商所控制的范围.然而你可能需要访问其它组织提供的服务,这时WAP网关就会通过防火墙向其它机构网络的远端服务器发送它的HTTP包.网络运营商可以在它们的WEB服务器上设置DMZ(非禁止区域),以向普通大众提供WAP或Internet服务,但是主要的服务还是应该放置在公众无法访问的独立的服务器上.
在安全性方面,可以明确的一点是:如果WAP网关作为手机的代理使用HTTP 1.1协议与WEB服务器通信,那么TLS是可以确保WAP网关和WEB服务器之间的一切通信安全的,这点与Internet一模一样.但是TLS不能确保手机与WAP网关直接的通信安全,这是因为TLS需要可靠的传输层,即TCP,但是手机并没有使用TCP与WAP网关通信.TCP适合于高带宽和高可靠度的网络,而移动网络无疑不具备这样的特征.而且普通的移动设备的处理器和资源无法应付TCP协议栈的需求,因此WAP讨论组设计了另一种比较轻便和适合于移动网络的协议栈,该协议栈在IP网络上使用UDP或在非IP网络上使用WDP作为其传输层协议.
2.WAP网关
如同TLS对于Internet作用一样,多数情况下WTLS已足以确保WAP的安全.但是对于WAP有一个不安全的例外,该例外只发生在WAP会话中,而且与WAP网关有关.WAP需要将WML与WMLScript翻译为二进制代码,以适合与在低带宽的网络上传输,并且使得资源贫乏的终端设备易于处理.WAP网关负责这种转换,这里存在2点暗示:
◆WTLS安全会话建立在手机与WAP网关之间,而与终端服务器无关.这意味着数据只在WAP手机与网关之间加密,网关将数据解密后,利用其它方法将数据再次加密,然后经过TLS连接发送给终端服务器.
◆WAP网关可以看见所有的数据明文,而该WAP网关可能并不为服务器所有者所拥有,这样,潜在的第3方可能获得所有的传输数据,而该数据却被认识是安全传输的.
在有线互联网世界里与WEB服务器建立安全连接,通常会假设您与Internet有一条不为第3方干预的直接连接.如果您从公司网络访问Internet,则数据包在达到Internet之前往往会经过代理服务器.这种情况下,访问Internet的安全性就依赖于所使用的代理服务器的配置情况.一些ISP提供缓存服务,其中包括了代理服务器,您可以配置浏览器以通过这些代理进行网上冲浪.另外还有一种透明的代理服务器,使您无需配置本地浏览器就可以直接使用它.这似乎与介于设备和服务器之间的WAP网关很相似,但其实它们有着本质的不同.代理服务器为SSL/TLS会话建立了"隧道",它有些像路由器,只是进行包的转发,而不会对数据进行解密进而获得数据明文.
当然,你可能会说WEB服务器会在其后方的应用程序之前先获得数据明文,但是,对于多数有较高安全需求的公司来说,他们一般拥有这些WEB服务器以及连接WEB服务器和终端应用程序的网络.这意味着他们可以控制谁有权发现WEB服务器的位置,WEB服务器对谁是可见的,谁对WEB服务器具有管理权限,何时对服务器进行维护,以及其它与服务器和网络安全相关的事项.
然而让网络运营商拥有WAP网关究竟有多大危险呢 诚实的回答是:危险很小,但仍然存在.著名的网关供应商和网络运营商都尽力确保他们的WAP网关安全.很明显,他们并不愿意他们的业务与安全灾难有任何牵连,所以他们保证数据明文不在磁盘上读写,而且加密与解密全部在内存中以最快的速度进行,这些进程使用的内存空前在释放前必须被覆盖,以确保数据是绝对安全的.
以上的所有措施都是非常可靠的,并且或许能够满足多数人的需求.然而仍有不少人持怀疑态度.我们可以考虑这个事实,尽管许多最大的软件生产商和世界上最好的编程人员都在尽力解决安全问题,但是各种产品的安全漏洞却不断地被发现.有些人认为,WAP网关的安全漏洞迟早会暴露,这或许是由于软件的脆弱,或许由于配置和管理错误,或许是由于雇员的蓄意或无意地操作.
对于那些有着较高安全需求的公司来说,一个很明显的可行的解决方案是拥有自己的WAP网关.许多著名厂商如Nokia等都推出了自己的WAP网关产品,您可以在自己的站点上安装它们.另外有一些WEB和应用程序服务器的生产商也在它们的产品中嵌入了WAP网关,如BEA的WebLogic.如果您决定运行自己的WAP网关,那么需要考虑几个问题.根据您的安全需求和环境配置情况,您可以成为自己的ISP.如果那些移动设备访问的应用程序很敏感,而您不希望它们被Internet访问,则您需要建立调制解调器堆和RAS服务器,以允许拨号访问您的网络.您应该允许您的用户连接到WAP网关及其之后的服务.除非您同意您的用户经过您的网络访问Internet,否则您必须在您的网络上配置Internet网关,这样用户就无法访问到Internet上的其它WAP服务.如图2所示是一个例子.
图2 WAP网关配置模型(1)
根据所要提供的服务,这些可能根本不是问题.许多客户可以轻易地满足上图的配置,因为他们已经具备了大而且复杂的计算环境,以支持拨号连接.他们一般明确地表示不希望Internet能访问到他们的应用程序,而且不希望用户能通过他们的网络访问到Internet.他们通常是大型的投资银行或基金管理结构,具有迫切的安全需求和充足的资金以建设这种机构.这种方案一般不适合于小公司.
另一种配置方案可以让您具有自己的WAP网关,但是无需额外的资金来充当自己的ISP.这种配置对你是否足够安全主要依赖于你的安全需求.一旦WAP网关可以被Internet访问,那么它将更容易受到攻击,当用户访问你的系统遇到问题时,你和ISP之间的责任分界线将不如上个模型那样鲜明.但是对于那些希望向公众提供服务而又想拥有自己的WAP网关的组织来说,这个模型比较容易实现.该模型中,用户拨号到ISP,接着就可以访问Internet,然后他们使用ISP的RAS服务器,并且就如同访问Internet上的任何WEB服务器一样开始访问WAP网关.这个模型是安全的,因为在手机与WAP网关之间使用了WTLS作为"隧道"协议.
图3 WAP网关配置模型(2)
虽然在该图中WAP网关和WEB服务器位于同一个网段内,但在实际中并非一定如此.就如同网络运营商拥有网关时一样,WAP网关和WEB服务器可以位于不同的网段,而且WEB服务器甚至可以位于Internet可以访问的另一个网络中.由于TLS用来保证网关和WEB服务器之间的通信安全,它就同Internet上任何客户/服务器连接一样安全可靠.
值得一提的是,一些零售金融机构选择通过网络运营商的网关向用户提供服务,因为他们希望用户能够便利地访问他们的移动银行服务.由于在交易环节中存在着安全缺陷,那么用户自然会考虑是否值得使用这些服务来进行与帐户的交易.这种安全问题同样会影响用户在移动连接上使用信用卡的意愿.
考虑到需要将WML和WMLScript转化为二进制代码,如果我们要提供端到端的安全解决方案,就要求应用层支持认证和数据加密.WAP 1.2说明中的加密库只包含了一个函数,用来为文本串产生签名,但是该说明也指出,在未来版本的说明中,可能加入新的加密功能.当支持WIM(WAP Identity Module,WAP身份模块)的设备启动时,它有可能将产生签名的密钥保存在智能卡上.WAP讨论组已经意识到了端到端安全性的问题并且正在寻找解决方案,但至今仍没有书面的标准方案,因此我们只能利用现有的协议自己设计应用程序.
3.TLS与WTLS
TLS的前身是SSL,它是Internet上最重要的安全标准.SSL是由Netscape的工程师于1993年发布的,意在不改变现存的应用和协议的前提下提供一种安全机制.SSL的有效性使得它在Internet上十分流行.SSL已经成为了Internet标准,并且由IETF(Internet Engineering Task Force)继续管理和发展.如今SSL被更名为TLS,WAP讨论组就在TLS的基础上实现了WAP安全.
虽然TLS是建立在传输层,其实它是介于应用层和真正的传输层之间的附加层.同样,WTLS也是建立在传输层之上,但在它上面是WTP事务层和WSP会话层,这2层在Internet模型中是不存在的.这种安排使得它们与应用层所要求的服务无关.
TLS同WTLS最显著的不同是:TLS需要一个可靠的传输层,也就是TCP.TLS无法在UDP上工作.WAP协议栈没有提供可靠的传输层,而且在分组网络上优先选择了UDP.它只在协议栈的上层通过WTP和WSP实现了可靠性.因此,这也是设计另一套安全协议的动机,使得WTLS工作在WDP和UDP之上.WTLS帧中定义了序列号,而这在TLS中是不存在的.该序列号确保WTLS可以工作在不可靠的传输层上.WTLS不支持数据的分组和重装,它将这个工作交给了下层协议处理.与此不同的是,TLS可以对上层协议的数据包进行分组.
TLS和WTLS都认为会话和连接是不同的.连接一般认为比会话更短暂.在无线网络中,连接的生存期依赖于任何时候网络的覆盖质量,因此当火车穿越隧道或天气变化时它都会受到影响.会话比连接要持久,它可以存在于多个连接之上,我们可以用一个ID标识一个会话.该会话的安全参数用于确保连接的安全.这意味当连接被破坏时,会话仍然可以存在,并且能够在以后恢复它.
一个会话可以与另一个会话具有相同的安全参数,它可以来自当前某个有效的连接,也可以来自过去有效的连接.恢复连接可以使用一种优化的"握手"方式,而不用交换所有的消息.它也可以用来同时打开若干个连接,而使用相同的安全参数.一般由服务器决定是否允许会话被恢复.
WTLS允许通过匿名方式或证书对客户机与服务器进行认证,一般需要客户机或服务器在会话建立消息中提供他们的公钥.为了便于实现,一共定义了3类WTLS,在这3类中,有些特性是必备的,有些是可选的,还有些是不需要的.第1类实现必须支持公钥交换,加密和消息认证码(MAC,Message Authentication Code),而客户机和服务器证书,共享秘密握手(即客户机和服务器已经知道了秘密,因而不再需要对这些秘密进行交换)是可选的.第1类WTLS实现不需要支持压缩算法和智能卡接口.第1类实现可以选择通过证书实现客户机和服务器的认证,但不是必须的.第2类实现必须支持服务器证书,第3类实现必须同时支持客户机和服务器证书.第2类和第3类中的压缩和智能卡接口都是可选的.
当开始建立安全会话时,客户机向服务器发送一条请求消息,要求开始安全会话设置的协商过程(一般都是由客户机开始协商过程的).服务器可以向客户机发送消息,请求它开始会话协商,但客户机可以选择是否忽视该请求.在会话的任何时候,客户机都可以发送消息以请求对设置进行重新协商.如果有数据窃听威胁WAP安全,那么该重新协商过程将通过产生新的密钥以保证尽可能少的数据被暴露.当客户机请求安全会话的协商时,它将提供它所支持的安全服务列表.另外客户机还需要指出经过多少条消息之后这些安全参数需要被刷新,极端的情况是每条消息之后都要刷新这些参数.
如果双方所认同的公钥交换机制不是匿名的,那么服务器需要向客户机发送证书以标识自己.所发送的证书必须符合他们所认同的钥交换算法.事实上,服务器所发送的这条消息中包含了一条从服务器自身的证书到CA(Certification Authority)根的证书链,发送者的证书必须位于链表头,每个后续的证书必须验证它的前驱(上一个).CA根的证书可以在链表中省略,因为CA根证书是自由发放的,客户机可能已经拥有该证书,而且即使没有,客户机也能轻易地获取它.
如果钥交换不是匿名的,服务器还可以向客户机要求证书.如果客户机没有证书,则它需向服务器发送一条不包含证书的消息,然后由服务器决定是否继续与这个没有合法证书的客户机进行会话.通过这条消息,客户机可以证明它具有与公钥相关的私钥,其中的公钥包含在了它发送给服务器的证书中.客户机发送这条消息,其中包含了客户机与服务器之间的先前所有的交换握手消息,并且用它的密钥签名.这使得服务器可以进行相似的计算,检查签名中的消息摘要,然后与它所产生的进行比较,如果相符,则服务器认为客户机是可靠的,否则认为有错误.
TLS使用X.509证书,而WTLS定义了新的专为移动设备使用的证书.虽然WTLS可以使用X.509,但是多数移动设备并不支持它,因为它的体积太大.WTLS证书更适合于移动终端贫乏的存储资源.WTLS证书与X.509证书的格式对比如表1所示.
X.509
WTLS
版本(Version)
版本(Version)
序列号(Serial number)

算法标识(Algorithm identifier)
算法标识(Algorithm identifier)
发行者名称(Name of issuer)
发行者名称(Name of issuer)
有效时期(Period of vadility)
有效时期(Period of vadility)
证书所有者(属主)(subject)
属主(Subject)
属主公钥(Subject's public key)
属主公钥(Subject's public key)
发行者ID(Issuer ID)

属主ID(Subject ID)

发行者签名(Issuer's signature)
发行者签名(Issuer's signature)
TLS和WTLS在我们所讨论的通信中的2个角色上--客户机与服务器--都可以实现.在客户机上,TLS/WTLS发起与远端服务器的通信,并提出对安全选项的建议.在服务器上,它检查所提交的选项,并选择那些它实际使用的以确保通信安全.在任何协议中(包括TLS与WTLS)都有一组消息以确保客户机与服务器的信息交换,并有一套规则约束该交换的进行.
4.无线安全的未来
①WAP 1.2
WAP规范的最新版本是1.2.虽然WAP 1.2规范在较早就通过了,但是目前多数的手机和网关产品仍然只支持WAP 1.1.然而本文中所讨论的安全技术对于WAP 1.1和1.2版本来说是相同的.在近期未来对WTLS不可能有很大改动,主要是因为WTLS是基于很成熟的TLS协议的.这对于WAP开发者是一个好消息,因为这表示他们在与一个经过检验和尝试的技术打交道.虽然这并不代表WAP安全不会有任何发展,但是在可预见的将来,WTLS将作为新的WAP安全技术的稳定基础.
有一点可能的改变是以后的设备和软件产品可能会支持第2,3类WTLS,它们将使用基于服务器和客户机证书的认证.另外,WAP 1.2还有一项特性没有被广泛支持,那就是WIM.
②WIM
WIM规范是WAP 1.2中新加的内容.WIM的目的是将安全功能从手机转移到抗损害设备中.这种设备可以是智能卡或者SIM卡.智能卡有自己的处理器,可以在卡上的芯片中实现加解密算法和哈希功能.与手机上的软件实现相比,WIM有若干优点,其中之一是较好的性能,因为它可以设计专门的加解密芯片.智能卡还可以存储数据,比如一些经常需要访问的数据,包括私钥和共享秘密等,它们通常用于建立长时间的会话.从共享秘密中继承密钥是很有效的,因而,从性能上看,保持这些长时间的会话,并且可以随时挂起和恢复它们显得十分重要的.当然,这也表示需要长时间存储这些共享秘密和继承的密钥.既然已经在智能卡上保存了这些数据,那么手机中就不用留有备份.当手机遗失时,任何人都不能轻易地重用这些会话.另外,即使手机电池耗尽,密钥也不会丢失,并无需重新建立.
WIM规范中并没有包含API(Application Pragramming Interface,应用程序编程接口),而且不能被WML和WMLScript直接访问,以后这点可能会有所改变.规范主要定义了卡的行为以及底层接口,这样生产商在移动设备上实现WTLS时就能够任何兼容的WIM相配合.这表示该功能主要依赖于设备生产商.
将私钥与一些敏感的安全信息从手机中分离出来还可以解决其它问题,如由于用户可以将智能卡与手机分开保存,那么个人的合法性认证与设备的合法性认证的安全问题就迎刃而解了.当然,还有智能卡遗失的现象,不过我们仍有办法.比如我们可以将电话存储在SIM卡中,而将私钥存储在智能卡上,那么用户每次必须输入他的PIN码以获取安全服务,这样我们或许可以获得比目前的有线网络更安全的服务.
WAP委托证券交易方案
WAP证券委托交易方案
--WAP安全问题研讨
一,WTLS
SSL在WEB中广泛用来在浏览器和服务器之间加密数据流.它同样也适用于WAP环境.但是SSL只用在Web Server和WAP网关之间,而且还需要WAP网关支持该功能.在WAP网关和WAP设备之间,有一个类似协议叫做WTLS.WTLS是专门适合于无线环境的.
安全是一个非常敏感的问题.虽然没有任何一个系统是完全安全的,SSL和WTSL在我们的观点上对于很多应用是足够安全的.
二,WAP中的安全缝隙
在WAP安全中有一个关键的问题:两个协议在哪儿相互转换呢 在WAP网关中.
SSL并不直接兼容WTLS.因此WAP网关要解密从Web Server过来的SSL保护数据流,然后使用WTLS加密发送给WAP设备.反之,WAP网关也要负责解密从WAP设备过来的加密数据流,然后使用SSL加密发送给Web Server.因此在WAP网关中,数据在短时间内是没有保护的.

想象一下银行或者其他机构使用公开的WAP设备,处理一些敏感的数据.当数据离开他们的系统和网络之前,数据是受到保护的.但是在进入WAP网关(网关是由第三方操纵,例如:移动营运商.)之后,数据被解密.我们不能说所有的移动营运商都是危险的,但是将敏感数据暴露给不知道的第三方是很不让人放心的.任何一个营运商的问题将是所有营运商的问题.你的客户可能旅游到另外一个国家,在那儿安全问题被忽略.如果营运商的网络容易受到攻击,那么你的数据也难免.
三,WAP Server
所有主要的WAP厂商都在开发方案来解决这个问题,但是在解决的时候又出现了新的问题.他们在开发一种称作"WAP Server",或者是具有WAP网关的Web服务器来解决端到端的问题.因为数据离开WAP Server的时候就已经是WTLS加密.
这样WAP网关就不再是真个过程中的一个环节.那么用户必须重新配置他们的WAP设备来指向WAP Server来建立相应WAP会话.当用户想访问其他地方的时候,又必须配置来指向其他的网关.有的WAP设备还比较好配置,但是有些却非常困难.
除了以上的问题,实际上许多移动营运商将端到端的服务器放在用户拨号到Internet的地方.他们的WAP网关具有同样的私有IP地址,通常是在一个防火墙后面.这个防火墙通常只允许使用HTTP协议的80端口.WAP网关使用这个端口来接收从内容服务器来的数据,那也是它的真正需求.当WAP设备试图访问其他的网关的时候,那么防火墙就将停止他们的操作,要么因为是WAP设备IP是不允许在Internet上访问其他的设备,要么是无法打开所需求的端口.这样移动营运商就有效地阻止了用户使用其他的网关.
四,穿透模式
有很多人在提出方案解决这个问题,甚至有人说下一个版本的WAP协议将有解决方案.直到现在,至少坐下来想想,你到底要做些什么呢 在我们的观点,有很多更简单的方法来得到一个人的信用卡号码,名字和签名,比攻击WAP网关要容易得多.
如果让我们提个建议的话,我们想让WAP网关接收已经加密的WTLS数据流,并且就让它直接通到浏览器一方.这个将问题的麻烦减到最少.毕竟更新网关比更新WAP设备要简单.第三方的网关(例如:移动提供商)是依赖于数据流的,既然数据已经由公司所提供的WAP Server使用了WTLS来实现保护.
从另外的角度来说,WAP网关有两种模式::一种模式就是和今天的WAP网关一样;另外一种是"穿透"模式.就是当网关检测到WTLS的数据流的时候,就简单地让它通过.

五,客户端方面的问题
然而不幸的是,即使是穿透也是难以实现的.一个方面在于电信方面,另外一个原因是在于现在还没有WAP客户端(或者WAP手机)是按照WTLS协议来运作的.大部分只是简单地安装了一个WML Browser,连最基本的WML Script都不支持.所以说WAP的安全从某种意义上来说是空谈.
六,WIM(WAP Identify Module)
针对WAP在安全上的种种问题,WAP Forum发布了新的协议来解决安全问题.其中之一就是WIM协议.
WIM是WAP Forum定义的一个抗窜改的设备.它被用来执行无线传输层和应用层的安全功能.当然还包括了保存和处理用户的ID和权限方面所必须的功能.WIM解决安全方面两个最基本的问题.
第一个是在WAP网关服务器和移动终端之间的实行WTLS协议.WTLS从某种意义上等同于今天Internet上的SSL协议.它提供双方的验证和效验.WIM通过保存在智能卡中的密码学算法来执行这些任务.
第二个就是通过数字证书签名和反抵赖技术来保证应用层的安全.PKI(公共密钥构架)提供了一个高可信度的构架来发放和管理数字证书.
七,智能卡技术
谈到WIM协议的应用,就有必要简单地提一下智能卡技术.
在当今社会,很难想象一个没有信用卡的交易(即使是最简单的交易).他们在现代社会中越来越普遍.这些塑料卡片正在,通过增加各种功能和能力,成为一种"智能"卡片.一个智能卡片是一种看起来和信用卡差不多的塑料卡片.但是它有一个决然不同的之处:智能卡片有一个内嵌的微型处理器.这个微型处理器具有和计算机类似的能力,例如:运行程序,处理输入输出和输出存储.但是不像大多数计算机,一个智能卡片它没有显示器和键盘.也没有电源.因为它需要一种输入输出能力,因此字能卡片经常与一种卡片接入设备(Card Acceptance Device,CAD)一起工作.这就是,卡片读写器或者终端.这些设备都有一个插口,可以供卡片插入,进行读写.这些卡片读写器可以连接计算机或者这些读写器本身就是计算机.
既然智能卡的微型处理器可以编程,你可以通过编程来实现一些普通信用卡所不能实现的功能.例如:你可以使用智能卡来实现"随时随地付款".一种服务就是收取过桥费.这里你可以购买一种卡片,它里面已经预先保存了一些钱的数值.当你每次通过收费站的时候,一个扫描器将读取当前的卡片当前的钱数(这个卡片也许会安装在你的仪表盘上),并扣从卡片中扣除当前的过桥费用.当你当前的卡片费用不够的时候,你可以购买新的卡片,或者重新增加一些钱数.智能卡片也可以用来保存个人记录,例如,你的医疗记录.每次你拜访一个医疗诊所,管理员就会更新你的卡片来保存当前的记录.当你无法获取你的医疗档案的时候,这个在急救的时候特别有价值.
这是有限的两个智能应用.智能卡不仅仅可以用来书写不同的应用,它还允许下载不同的应用.如果这些应用是通过Java Card技术编写的,那么这些应用的编码和数据将会相互隔离.在Java术语中这些应用被称作在自己的沙盒里运行.另外智能卡可以编程.这个对于卡片的发行者来说提供了十分重要的便利.例如,银行想更新这些卡片,它只需要通过连接计算机的读写器更新一下程序就可以了.下次银行的用户就会自动地通过阅读器下载程序,而不需要重新发送卡片.
八,WIM/SIM卡
WIM/SIM卡就是带有WIM模块接口功能的STK卡.它从某种意义上来说就是支持WIM功能的SIM卡,符合WAP协议1.2版本.它的应用方式有以下几种:

它的接口方式如下图:

九,WIM所存在的问题
WIM技术从某种意义上来说似乎解决了WAP的安全问题.但实质上还是存在很多问题:
仍然不是端到端的技术解决方案.安全间隙仍然会存在.(有关安全缝隙,请见前面的介绍)
WIM卡仅仅是一个符合WIM协议的智能卡.现在积极推广WIM技术的厂家主要是智能卡厂商.而并没有解决WAP浏览器如何与WIM卡建立联系.可以说目前的WAP浏览器都还不支持WIM卡的安全功能.
很多技术问题并没有得到澄清,在一段时间内不会得到广泛的应用.例如:WMLScript签名技术.目前很多WAP手机还不支持WMLScript.手机的制造厂商也没有发布对WMLScript支持的消息.
即使是解决了信息加密传输的问题,但是仍然没有解决恶意重复攻击的可能性.
WIM卡是一种新兴的技术.还没有找到成功的应用案例.没有人愿意冒这样的一个风险来检验这个技术的好坏.
十,WAP安全过渡方案
WAP安全过渡方案是指在目前WAP安全问题还未完全解决的情况下,采取其他的方法来解决WAP的安全问题.这其中将要结合短信息技术和STK技术.
在这个方案中首先要明确的是:WAP将主要作为一种信息的浏览和交互手段.也就是说充分发挥WAP功能,实现普通信息的浏览和用户交互.但不使用WAP来实现敏感信息的浏览和交互.
使用加密短信息技术实现关键信息的加密传输.短信息技术每次发送可以支持160个字节左右的数据量.因此从某种意义上来说并不适合于作为信息浏览和交互的方式.但是通过加密短信息技术可以传递一些关键性的内容,例如:用户的帐号和密码.
使用短信息技术弥补WAP目前缺乏的推送功能.WAP除了以上所谈到的安全问题,它在推送方面也存在一定的问题.至少现在还没有实现相关的WAP推送服务应用.但是作为短信息技术,其推送功能已经相当成熟.因此可以采用短信息技术来弥补WAP推送功能的不足.那么很容易实现:到价提醒,交易回应等等.
使用STK技术来弥补WAP目前不完善的安全机制.STK是可编程的智能卡.里面可以安装密码学相关的各种加解密应用.使用STK技术实现加密可以实现端到端的安全保障,弥补WAP目前的安全漏洞.
结合补充的安全协议来实现整个系统端到端的安全保证.毕竟短信息与WAP是两个不同的通道.现在他们要合作起来形成一个完整的安全系统,就需要其他的安全协议来保障整个系统安全性能的完备与统一性,防止系统之间的安全缝隙.
十二,WAP安全通道图解
WAP安全通道就是结合WAP通道与SMS通道各自的优势来实现整体的安全保障体系.其基本情况可如下图所示:
在图中黑色代表非加密的通道,红色代表加密的安全通道.实线代表WAP或者WEB通道,空心线代表是短信息的双向通道.因为单据服务器中有比较敏感的数据,因此要将它放在二级防火墙后.
十三,安全实施步骤
为了保证用户安全的进行各种操作,其操作步骤必须有一定的要求.现在以用户下单为例,列举出各个用户各个步骤的实施过程:
1. 用户登陆到WAP站点.在这个阶段实施登陆认证.即使用保存在WAP服务器上的用户名和口令来效验用户.如果成功则进入站点首页;如果不成功则拒绝用户请求.需要注意的是:用户名必须是用户的手机号码,而且其身份与Web上的用户注册相互绑定.即用户如果想使用WAP服务,那么在Web上进行注册的时候必须注册手机号码.密码可以与Web站点相同,但是强烈推荐采取不同的口令来保证与Web系统的隔离.
2. 用户浏览WAP站点上的相关内容,并有意向下单.
3. 用户进入下单栏目,并填写单据.注意:这个时候并不需要用户输入交易用的用户名和密码.
4. 用户下单完成,将单据提交到WAP服务器.WAP服务器将生成一个操作流水号,并且将这个操作流水号,所提交的单据和时间一起进行MD5计算得到一个数字签名.并将操作流水号,单据和数字签名一起发送给单据服务器.注意:(1)操作流水号不能是简单的递加过程,应该是一个不重复的随机过程.这样才可以保证一次一密的效果.(2)WAP服务器与单据服务器之间可以使用HTTPS进行安全传输工作,或者采用协议隔离.防止相关信息泄露.
5. 单据服务器将通知SMS服务器发送相关的单据内容.SMS服务器在接收到操作流水号,单据和数字签名之后,首先效验单据和操作流水号是否完整(即没有人篡改相关的内容).然后将单据和数字签名通过加密的短信息通道发送到用户手机.
6. 用户接收到加密的短信息,STK卡会将内容解密,并将内容显示给用户.在确认所下的单据以后,记下数字签名,并直接回复该短信息.回复的内容应该包括数字签名,用户账号和密码.STK卡会对所发送的内容进行加密,并发送给短信息服务器.注意:数字签名与用户账号和密码是分别加密的.也就是说先加密用户账号和密码,然后将加密的结果与数字签名再次加密.
7. 短信息服务器在规定的时间内接收到用户的回复,并将该回复发送给单据服务器.单据服务器上的程序执行解密过程(注意:解开后是数字签名和加密的用户帐号和密码),并在记录中寻找对应的数字签名.在找到对应的数字签名之后,核对用户的操作流水号和单据是否完整(即没有人篡改相关的内容).然后将单据,加密状态的用户账号和密码提交到柜台系统.
8. 柜台系统将处理结果返回给单据服务器.单据服务器将处理结果通知给用户和WAP服务器.
9. 用户可以继续其他操作.
十四,攻击方式的对策
以下,我们就这个系统中可能存在的各种攻击方式进行讨论.
如果有人通过某种方式得到了用户WAP站点的登陆名和密码.他想冒充该用户进行交易处理,那么他是无法完成整个交易过程的.
他无法在Web站点上使用该登陆名和密码.因为Web与WAP的账号管理是独立的.
他如果冒充用户登陆,并发送了相关的单据(例如:下单操作),那么他也接收不到确认单据.因为确认单据是要发送到用户手机上的.他如果没有持有用户的STK卡,那么他就肯定得不到确认单据.
如果确认单据发送到用户的手机上,用户可以否定该单据,并决绝回复.在超时后,服务器就会自动放弃该单据的操作.
如果在等待超时过程中,有人冒充用户用短信息回复信息,那么可以肯定三点:(1)回复的手机号码并不是用户登记的号码.(2)因为拿不到确认单据,所以他得不到数字签名.因此数字签名不对,会遭服务器拒绝.(3)他得不到用户的账号和密码.柜台系统会拒绝相关的操作.
就以上的讨论,我们可以知道:如果有人想冒充用户从任何一个环节下单,他必须同时具备:(1)用户WAP账号和密码;(2)用户的手机;(3)用户交易账号和密码.如果某人同时具备这三个条件,我们应该可以认为这个用户就应该是用户本身.
如果有人冒充服务商,向用户发送假的确认信息.那么用户可以从以下几个方面识别:
接收到的服务号码必须是服务商的服务号码.
用户可以知道自己是否发送过相关的定单(定单应该具有强的时效性).
即使用户回复该信息,同样会遭到拒绝:
假的数字签名将会被单据服务器拒绝.
数字签名相当于一个时效性很强的密码.如果用户没有提交相关的操作,那么单据服务器中就会拒绝相关的操作.同时也防止了同一个过程被人恶意地重复操作.
即使得到了用户所发送的信息,信息也是加密的.而且加密是分两个不同层次,即:账号和密码,加密后的账号密码和数字签名.由于数字签名的存在,保证了每次加密信息结果的不同.
十五,总结
以上的方法的优势在于:
不需要独立的网关和接入系统.
不需要购买过多的硬件设备.
可以利用现有的WAP系统和SMS系统.
实现端到端的解决方案.
如果WAP系统的安全问题得到解决,马上可以过渡到完整的WAP安全解决方案中.
可以实现信息推送的功能.

WAP的编程模型是以Web编程模型为基础的.因此在阅读本章之前,读者应该对Web编程模型有一定的了解.下面介绍WAP网络构架,如何搭建开发与测试环境和使用WAP的开发工具.在对WAP的概念有了初步了解之后,再来学习书写静态WML页面,使用服务器端脚本语言动态输出WML,在WML页面中显示中文和动态输出WBMP图像.
一,WAP整体简介
WAP应用环境是一个通用的应用开发环境.它支持在不同无线承载网络上开发和运行WAP应用服务.这个应用环境的基础是现有的Internet技术.
WAP应用环境
WAP体现为一种全面的和可扩展的协议,可应用于:
任何具有支持WAP协议的移动设备,如各种手持无线设备.
任何现有或正在设计中的无线服务,如SMS,CSD,USSD和GPRS.
任何移动网络标准,如CDMA,GSM或UMTS.
大部分现有的Internet应用服务.
WAP应用环境是一个通用的应用开发环境.它支持在不同无线承载网络上开发和运行WAP应用服务.这个应用环境的基础是现有的Internet技术.整个环境如图2-1所示.
图 2-1 WAP应用环境
WAP应用环境分为三个部分:WAP移动设备,WAP网关和信息服务器.
WAP移动设备:
WAP移动设备就是指支持WAP协议的移动用户终端.在它内部装有微型浏览器,用户可以采用简单的选择键来实现服务请求,并以无线方式发送和接收所需要的信息.WAP移动设备显示按照WML(Wireless Markup Language,无线标记语言)格式化后的各种文字图像数据.一个典型的WAP移动设备就是WAP手机.与普通手机相比,WAP手机除了内置的微型浏览器以外,还有内置的Modem.用户是通过拨号的方式连接到WAP网关的.这个过程与使用个人电脑和Modem连接到Internet没有什么大的区别.因此在使用WAP手机的过程中,设定拨号号码和网关的IP地址是不可缺少的.
WAP网关:
它主要完成两个功能:实现WAP协议与Internet协议之间的转换;WML内容编码和解码.通过将WAP用户的请求转换为HTTP请求完成请求代理过程,通过对返回的内容进行编码压缩来减少网络数据的流量.既然WAP手机使用的是拨号连接网关,那么也就意味着不一定要连接到移动提供商的网关上才可以连接到Internet.对于有条件的个人,公司或企业完全可以建立自己内部的WAP网络.
信息服务器:
信息服务器为客户提供基于WAP的各种服务.现在Internet上的很多应用已经成功地移植到WAP上.例如:股票交易,天气预报,车船时刻表等.一些专业应用也正在向WAP转移.例如:SMTP服务,POP3服务,Telnet服务,FTP服务等.
WAP应用环境在于为应用开发人员和营运商提供了在不同类型的网络,数据,终端上进行服务的新途径.WAP标准在设计时将应用要素与使用的传输数据类型独立开来,使一些应用的承载网络的转移(如从SMS,CSD转为GPRS)成为可能.
WAP与Internet的对比
图 2-2 各个层次之间的对比
图 2-3 各个层次之间的相互关系
图2-2所示左边是Internet构架的各个层次,右边是WAP协议的各个层次.层叠排列的WAP协议体系为无线装置的应用开发提供了可扩展,可延伸的环境.每一层协议或其他服务和应用程序可与它下一层协议直接对话.通过精心设置的一系列接口,外围服务和应用程序可以利用WAP体系提供的各种功能,包括直接使用会话层,交易层,安全层,传输层等.
Wireless Application Environment(WAE)无线应用环境.
WAE是建立在移动技术与WWW结合基础之上的应用环境,目的是为营运商,服务提供商的服务和应用程序建立一个交互操作环境,使他们可以灵活地接入不同平台.WAE包含一个微型浏览器,具有以下功能:
· 无线标记语言WML:一种轻型标记语言,类似HTML,专为手持终端做了优化.
· WMLScript:轻型的脚本语言,类似于JavaScript.
· 无线电话应用:电话服务及其编程接口.
· 内容格式:精心设计的数据格式,包括图像,电话号码簿和日历信息.
Wireless Session Layer(WSP)无线会话层.
WSP向WAP应用层提供两个会话服务的统一接口:一个是在传输层协议WTP之上的面向连接的服务,另一个是在安全或非安全数据报服务(WDP)之上的非连接服务.WSP系列协议针对低功率,长等待时间的网络数据载体进行了优化,它现在由浏览应用的服务组成(WSP/Browsing),WSP/B允许使用WAP Proxy连接WSP/B的客户端和标准的HTTP服务器,具有以下功能:
· 无线编码中的HTTP/1.1功能和语法.
· 较长时间的会话状态.
· 会话随着会话者移动而暂停或继续.
· 建立一个传送可靠或不可靠的数据的通用设备.
· 协议的协商.
Wireless Transaction Protocol(WTP)无线传输协议.
WTP运行于数据服务之上,提供了一个适用于"轻体"客户(移动终端)的面向传输的轻型协议.WTP可有效地运行于安全或非安全的无线数据网络,具有以下功能:
· 三个等级的传输服务;
· 不可靠的单向请求.
· 可靠的单向请求.
· 可靠的双向请求-回答传输.
· 可选择的用户-用户连接,WTP用户自行确认每次收到的消息.
· 可选择的带外数据确认.
· PDU连接和延时确认,以减少传送的消息数量.
· 异步传输.
Wireless Transport Layer Security(WTLS)无线传输安全层.
WTLS是基于工业标准——TLS(以前称为SSL)上的安全协议,同样针对移动通信使用的窄频信道进行了优化,它应该与WAP传输协议同时使用.应用程序可视自己的安全要求和网络特点,选择启用或不启用WTLS功能.WTLS的功能如下:
· 数据的完整性:WTLS具有保证终端与服务器间传送的数据前后一致且不会损毁.
· 传输的保密性:WTLS保证端到端数据的保密性,并可为数据传输过程的中介方读取.
· 认证:终端至服务器的校验.
· "拒绝服务"保护:检验和拒绝重复和未正确识别的数据,以保护上层协议.
此外,WTLS也可用于终端和终端之间的安全通信,如为交换电子交易卡提供认证.
Wireless Datagram Protocol(WDP)无线数据报协议
WDP可运行于各种网络的数据载体.作为一种通用的传输协议,它将传输端口根据底层数据载体进行改造,从而为WAP体系中的上层协议提供统一的接口,使会话层,应用层独立于底层的无线网络.如能保持传输层接口和基本功能的一致性,就可通过中介网关使广泛的交互操作得以实现.
Bearer 数据载体
WAP协议在设计时的目的是使它可独立运作于各种不同的数据载体之上,如SMS(短消息,CSD,封包数据等).由于数据载体因承载量,容错率和延迟的不同而有不同的质量,WAP协议就需要补偿或容忍这些特点.WDP集中处理体系中其他层次协议与数据载体的交流,除现在已经可以支持的数据类型外,随着新的数据服务在移动市场出现,它也会不断发展以支持更多的数据类型.
Other Services and Applications 其他服务与应用
通过一系列精心设置的接口,WAP协议还可以支持其他服务和应用程序使用WAP提供的功能.外围应用程序可直接切入会话层,交易层,安全层和传输层,虽然这类有价值的应用未在WAP标准中界定.WAP协议可用来开发诸如电子邮件,日历,电话号码本,手写板,电子商务和黄页,白页等各类服务等.
Wireless Telephony Application 无线电话应用.
WAP标准还定义了一个名为WTA的协议.它是一个面向通信的技术,使WAP能够融合电信网络中先进服务,比如智能网络(Intelligent Networks).在融合基于浏览器的WAP用户界面,WTA能够不用修改终端就直接享受基于智能网络的服务.
虽然WAP的整个结构层次比较复杂,但是由于底层的大部分工作都是由电信部门和移动提供商来完成的,因此总的来说只需要关心应用层的开发工作.在进行WAP开发时,各个部分的协议与Internet上有着一定的对应关系(如图2-3所示).这使得可以利用现有的Internet服务器也能实现WAP相关服务.
服务途径
图 2-4 服务途径
有以下几个途径来实现WAP服务(如图2-4所示):
Web服务器传送原有的HTML网页,由HTML过滤器转换成WML格式,再由WAP 代理服务器处理后形成二进制的WML数据流送往客户端.当然,WAP代理服务器可以集成HTML过滤器的功能.
Web服务器直接将WML网页传送到WAP代理服务器,由服务器处理后形成二进制的WML数据流送往客户端.
对于前面的情况,WAP代理服务器是在移动提供商一方.其实WAP代理服务器也可以在内容提供商一方.内容提供方式还是和上面所讲的方式相同.
由WTA 服务器直接将二进制的WML数据流送往客户端.这种方式主要是用于提供电话呼叫服务.
对于内容服务商来说,主要是考虑内容的提供方式.第一种方式的优势是不需要对原有的网络及其网页进行过多的修改.HTML到WML的工作由HTML过滤器直接完成.但是缺点也是很明显的.例如:
现有的过滤器只能做有限的转换,复杂的HTML网页就很难满意地完成.
由于HTML网页比WML网页复杂,因此传输的效率不是很高.
增加中间环节,降低了反应速度和工作效率.
采取第二种方法就需要编写专门的WML页面.这并不意味因为需要编写专门的WAP服务程序,就必须将所有服务程序改写.完全可以利用以前的Web服务程序,做适当的修改就可以达到目的.
对于内容服务商来说,在选择WAP的时候经常会遇到的两个问题就是:
需要特殊的WAP服务器吗
需要特殊的WAP代理服务器吗
回答是:既不需要特殊的WAP服务器,也不需要特殊的WAP代理服务器.其实可以通过配置Web服务器来实现WAP服务,因此这个时候可以将Web服务器称为"WAP服务器".如果没有特殊的要求,那么完全可以使用由移动商提供的WAP代理服务器.若想实现企业内部的 WAP网络或者考虑到安全问题的时候,就需要考虑采用独立的WAP代理服务器.采用独立的WAP代理服务器将会给用户带来麻烦.因为他们不得不频繁地更改手机上的设置,来进行服务切换.本质上来说,WAP设备只要接收到可以被解释的二进制WML数据流,那么无须考虑这个数据流的提供者到底是谁.
网络应用构架
图2-5 网络应用构架
图2-5是一个抽象的WAP网络应用构架.WAP网络应用构架还是沿袭传统的服务器—客户端模式,只是中间增加了一个网关.
客户端一般都是WAP移动设备,很可能是一部WAP手机.它们由不同的公司生产,具有各自的特点,对WML和WMLScript的支持情况也千差万别.现在已经上市的WAP手机有Nokia 7110,Ericsson R380,Motorola L2000www.以后随着更多厂家的加入,将有更多的WAP手机出现.一般来说手机的屏幕希望足够的大,分辨率足够高,否则浏览网页也将是十分困难的.由于屏幕大小的不一样,对WML和WMLScript的支持情况大不一样(就如同Internet Explore和Netscape对HTML标记的支持也是不一样的),在某种意义上需要针对不同的手机制作不同的网页,使得客户能够舒适地浏览页面.另外,WAP手机上网存在的安全隐患也需要加以考虑:散射在空间中的电波也会将用户的口令,密码等等敏感信息散射在空间中.
WAP网关就是在前面所提到的WAP代理服务器.它负责HTTP协议与WAP协议之间的互相转换,其主要功能有两个:
将取得的WML页面编译压缩成二进制WML流并发送给客户端.
将从客户端过来的二进制请求翻译成HTTP请求并执行该请求.
网关在整个构架中有着十分关键的作用,是连接客户和服务的桥梁.它可以在移动提供商一方(如图2-6所示)或者在WAP服务提供商一方(如图2-7所示)与应用服务器集成在一起.这两种方式都要根据具体的情况加以采用和实施.
图 2-6 WAP网关在移动提供商一方
图 2-7 WAP网关在服务提供商一方
在服务端开发应用程序和以前的Web服务开发没有太大的区别.只要符合CGI(Common Gateway Interface)标准就可以,无论是用ASP,JSP,PHP,Perl,ISAPI,NSAPI,C,C++,Basic,Delphi或者Servlet都是一样的.因此这给开发人员以很大的自由.其中的具体细节将在后面的章节中讲解.
二,测试环境
WAP开发中的一个重要环节就是搭建测试环境.对于WAP初学者来说,了解测试环境是十分必要的.WAP的测试环境可以分为三种:浏览环境,模拟环境和实际环境.以下就分别介绍这三种测试环境.
浏览环境
建立浏览环境十分简单,网上提供很多免费下载的WML浏览器.例如:WinWAP就是一个在Windows操作系统下运行的WML浏览器.只要输入提供WML内容服务的URL地址,就可以浏览WML页面.操作过程和Internet Explore十分像,界面如图2-8所示.
图2-8 WinWAP 2.2的界面
这种方式的优点是实施简单迅速,操作简单易学.但是由于是Windows下的浏览器,支持大部分的WML标记,窗口界面可以扩大和缩小,因此所看到的情况和手机上的模拟差别很大.另外也不提供编辑,编译和调试集成环境.
模拟环境
模拟环境是通过使用由移动电话公司所提供的WAP手机模拟器来实现WML浏览.在网上能免费下载的模拟器有Nokia WAP Toolkit,Ericsson R380 Emulator(图2-9),Ericsson WapIDE,UpPhone UP Simulator,Motorola Mobile ADK等.其中Nokia,Motorola和Ericsson提供了比较完整的集成开发环境.
图2-9 EPOC Emulator
这种方式提供了集成环境和WAP手机基本一致的模拟器.但是很难说所使用的模拟器和其产品完全一致的,并且没有网关的参与(有的模拟器可以设置网关),因此这是一个不完备的检测,特别是与WTA(Wireless Telephony Application)相关的服务没有办法进行检测.对于开发阶段来说,这样的环境就已经足够.
实际环境
根据网关所在的位置不同,实际环境的建立分为三种:
使用移动营运商的拨号和网关.
使用公共网关(在国际互连网上,有一些这样的公共网关).
使用自己设立的网关(通过拨号上网,使用简单的拨号接入软件和免费的网关来实现).
但是相比之下,使用移动营运商提供的WAP网关,费用要比其他两种方式要少.例如:移动营运商规定WAP上网费用是0.2元/分钟.如果采用直接拨号到自己设立的网关,那么至少要交纳市话费用0.5元/分钟.除非有特殊的要求(例如:建立企业内部的WAP网络或者考虑到安全问题),否则还是捡便宜的用.
在国内根据所使用的SIM卡不同可以分为:"联通"和"移动"(原中国电信的一部分).由于国内各个省市的电信部门各自布置有关的WAP设备,因此即使是属于一家,所采用的WAP设备也不尽相同.
实际环境的建立和以上的情况很相似.购买一些主流的WAP手机,开通WAP服务.在Internet上有一台Web服务器可供测试使用.将WAP手机连接到现有的网关,就可以真正地享受WAP服务了.当然,目前每一次测试可能要交纳一定的费用.
由于国内的WAP网络还处在实验阶段,并没有真正地推向市场.因此网络的稳定性比较难保证.在开发阶段,如果能有移动营运商的技术合作那是最好的.这样一旦有问题可以随时询问.
三,书写你的第一个WML页面
这里假设读者已经拥有了一台电脑,并且已经安装了Windows NT Server 4.0版本(对于个人来说一般选择独立域服务器安装),通过电话线能够接入到Internet.在这个基础上来讲述如何搭建WAP平台.
首先要给Windows NT Server打上Server Patch 4.0.一般在网络上可以找到Server Pack 4.0版本.然后安装Option Pack 4.0,里面有Internet Information Server 4.0(以下简称为IIS).如果拥有Visual Studio 6.0企业版,这个的问题就很简单了:直接安装Back Office就可以解决问题.Back Office里面含有很多服务组件.其中就有Internet Information Server和FrontPage Server Extension.安装完成之后,现在的电脑就是一台为开发而使用的服务器.
翻到本书后面的WAP资源一章,找到下载WinWAP 2.2的网址.从网上下载一个WinWap 2.2,将它安装在电脑上.在完成WML浏览器安装后,试着启动它.如果一切正常,它将直接通过Internet连接到提供商的WML主页上.在菜单里可以找到 "View Source"(查看源文件)这个选项.通过阅读别人的WML页面进行学习,是一种很好的学习方式.
使用记事本(或者读者喜欢的文本编辑器)输入一个最小的WML页面,如图2-10所示.输入的时候注意,第一行要顶着开头写,不要留下空白或者空行.否则,在其他模拟器浏览下就会出现问题.WML对页面书写的要求比较严格,因此最好按照要求来做,否则后面很麻烦.
Hello World !
图 2-10 输入Hello.wml
写好后将它保存为hello.wml.注意:如果使用记事本,那么它将会无视输入的文件扩展名,而直接以txt作为文件的扩展名.因此还必须手工修改文件的扩展名.
启动IIS服务器管理(图2-11),展开服务器下的子目录(如果无法展开,可能是WWW服务没有启动.从"服务"中启动WWW服务,或者直接在IIS Console中启动服务).
图 2-11 IIS服务器管理
找到"默认的Web站点",用鼠标右键点击(图2-12).在弹出菜单中找到"New"(可能由于中文或者英文版本而略有不同),再在子菜单里找到"虚拟目录".
图 2-12 建立虚拟目录
点击它,就会弹出一个对话框.第一页是输入别名(图2-13),例如:wap.第二页是确定hello.wml所在的子目录(如图2-14).第三页是确定访问的权限(图2-15),可以先跳过这一页.现在可以点击"Finish",虚拟目录就建设完成了.
图 2-13 输入虚拟目录的名称
图2-14 指定虚拟目录所对应的目录
图 2-15 确定访问权限
在"默认的Web站点"下就会多出一个"wap"目录.用鼠标右键点击它,在弹出菜单中选择属性"Properties",就会弹出一个对话框(图2-16),里面有好多配置选项.选中"HTTP标题",在下面有MIME映射类型"MIME Map",点一下"文件类型"按钮,就会弹出一个配置菜单.点"新增加类型",在对话框(图2-17)的第一行输入:"wml",第二行输入:"text/vnd.wap.wml",然后按"确认"按钮.在对话框中就多了一个:".wml text/vnd.wap.wml".好了,确定退出整个IIS Console.以后所有与WAP相关的文件映射都是从这里输入的.
图 2-16 虚拟目录的属性对话框
图 2-17 增加文件映射类型
在确保WWW服务已经启动的情况下,打开WinWAP,马上Stop它.在URL栏里输入:"http://127.0.0.1/wap/hello.wml",并按下回车.等着欣赏第一个WML页面(图2-18).(注:127.0.0.1是本机缺省的IP地址,并不需要对计算机进行特殊配置)
图 2-18 第一个WML页面
如果顺利地看到了"Hello World !"说明已经成功地走出了第一步.下面就要对WML做一个初步的讲解.在讲解之前,先来认识一下模拟器.本书后面的程序都将以Nokia WAP Toolkit 1.2为主要的测试工具.
四,简单地介绍Nokia WAP Toolkit的安装与使用
整体介绍
Nokia的WAP工具包有图形开发环境,浏览器和WML/WMLScript编译器.Nokia工具包目前只能在Windows NT 4.0上运行.要注意的是Nokia WAP Toolkit需要首先运行Java 2 runtime才能使用,所以需要先到Sun的Java站点(java.sun.com)去下载一个Java 2 SDK或者Java 2 Runtime Environment(JRE)才可以安装使用Nokia WAP Toolkit.
安装完之后,可以看到WAP工具包程序组中包括一个工具包IDE,一个很好的关于WAP,WML和WMLScript的详细文档以及工具包本身.该工具包可以在同一个应用环境下进行编辑,修改和测试WML/WMLScript文件等工作.
用户可以通过直接装载WAP应用的URLs或通过WAP网关进行浏览网页.Nokia还出售一个独立的基于WAP Server的Java Servlet.该产品将应用服务器功能和WAP网关功能集成到一个产品中.总体来说,Nokia WAP Toolkit相对显得较成熟,实用.
安装指南
在从Sun的Java站点下载了Java运行环境以后就可以开始安装Java运行环境:先安装jdk1_2_2-001-win.exe,然后安装jre1_2_2-001-win-i.exe,最后安装hostpot_1_0_1-win.exe.
安装Nokia WAP Toolkit:在安装了Java运行环境之后,直接运行Setupex12.exe.如果还没有安装Java运行环境或者安装了不合适的Java版本,安装程序都会给出提示并自动退出程序.
启动
从"开始"菜单栏中找到"Nokia WAP Toolkit",选择"Toolkit".Nokia WAP Toolkit就启动了.由于Nokia WAP Toolkit是使用Java编写的,因此启动的时候过程比较缓慢.在启动以后,就自动处于如图2-19所示状态:
图 2-19 Nokia WAP Toolkit
左边是集成开发环境,右边是6150界面的模拟器.在启动Nokia WAP Toolkit之后,它自动调用一个工具包自带的初始化页面,并将其文本内容显示在"WML Deck"一栏中.
功能介绍
总的来说Nokia WAP Toolkit的使用并不是很复杂.只要懂得WAP中的一些概念,学习起来还是很容易的.其他模拟器的基本功能都十分相似,在本书中不再做详细介绍.
File
主要是关于文件操作的功能."New"用来生成一个新文件.注意到Nokia WAP Toolkit支持WML,WMLScript和WBMP文件的编辑."Open"是用来打开文件,"Save"用来保存当前文件,"Save As"是将文件另外保存.
Edit
主要是和编辑相关的功能.这和一般的写字板的编辑功能没有太大的区别.需要注意的是:无法粘贴其他Windows窗口的文本或者拷贝当前的文本到其他Windows窗口.
Go
"Back"返回到上一个页面."Home"返回到初始页面."Refresh Card"刷新装入卡片."Reload Deck"重新装入页面."Stop Loading Deck"停止装入页面.在装入的过程中,用户可以随时停止装入."Load Location"给模拟器指定一个URL地址.如果联合Web服务器做测试,那么这将是一个经常使用的功能."Load File"从文件装入页面.
Toolkit
"Toolkit"中主要是关于开发环境的一些设置选项."Show"中的选择项控制着在界面上需要显示哪些栏目.其中"Message"是关于浏览器的记录;"Variables"是关于当前页面中的变量记录;"History"是关于浏览器的历史记录;"Book Mark"主要记录了书签地址;"WML Deck"是当前WML页面的文本内容;"Session"显示了浏览器与服务器之间的交互状况.
"Clear Bytecode Cache"是一个非常有用的功能.如果不清除Cache,那么模拟器会自动调用上次的页面.特别是做调试的时候,如果对页面的错误已经做了修改,但是忘记了清除Cache,那么在使用模拟器浏览的时候,它仍然将使用上次保存在Cache中的错误页面.所以每次修改之后,不要忘了选择这个功能.实际上,WAP手机中也有这个功能.如果使用手机测试的时候忘记了这一点,那么将永远找不到正确答案.有关Cache的问题,在后面将有详细的讨论.
"Add Bookmark"增加一个书签.如果在输入URL地址的时候觉得比较麻烦,就可以使用这个功能.在Nokia 7110中,也有同样的书签功能.
"Preference"是配置一些比较高级的选项.在"Communication"中,可以设置模拟器是通过HTTP直接访问WML内容服务器,还是通过网关访问.当通过网关的时候,需要对网关进行详细的配置."Encoding"是选择编码方式.在使用快速编码的时候很容易出现编译错误,可以把这项取消.在"General"中是其他一些配置,一般不影响模拟过程.
Help
主要是和版本,帮助文档相关的功能.Nokia WAP Toolkit有比较完整的文档,可以从中得到很多帮助.如果不嫌PDF和英文麻烦的话,阅读这些帮助对读者来说应该不是一件很难的事情.
五,初识WML
通过一个简单的WML页面来了解WML的基本情况
请大家先看第一个例子:

Yestock
Next Card

this is the second card.

通过以上示例大家可以了解到以下内容:
语法
WML的语法与HTML相似,仍然是一种标记语言,而且延续了XML语法规则.
标签
在XML和WML语言中,语言的基本元素称之为"标签".
标签必须被""括起来.
大多数标签都包括"起""止"两部分.例如:….
某些特殊标签可以只有一个标签,但是必须有结束标记"/".例如:.
属性
XML语言的标签可以包含很多属性,给标签提供必要的附加信息.
属性内容通常在起始标签内使用.
属性只作为参数为标签提供必要的信息,不会被浏览器显示.
属性的值需要被引号括起来(不能省略,这点与HTML不相同),可以是单引号或者双引号,引号可以成对嵌套使用.
例如:
id和title就是属性,而"friends"和"Hot link"就是属性值.
注释
注释内容是方便制作者阅读源代码,不会被浏览器显示.WML不支持注释嵌套.当注释中需要使用关键字的时候,例如:"".需要使用CDATA来躲避语法检查.CDATA内的数据内容都会被当作文本来处理,从而避开语法检查,直接作为文本显示.看下面的例子:

Result:

Nokia WAP Toolkit 1.2的测试结果如图2-20所示:
图 2-20 CDATA测试结果
文档结构
WML文档是由卡片(card)和页面(deck)构成的,一个页面是一个或多个卡片的集合.在这里做个比方:页面就好比是手中的一副扑克牌,而每一张牌就是卡片.那么在桥牌的每一局中,虽然手中的卡片会有所不同,但是将这些卡片统称为页面.
在得到客户终端的请求之后,WML服务器通过网络把页面发送到客户的浏览器(有时候被称作用户代理).访问者可以浏览页面内包含的所有卡片,而不必从网上单独下载每一个卡片.程序中的第一个卡片是缺省可见的卡片.
如果WAP设备接收到上面例子的程序(需要提醒的是:手机接收到的内容是已经经过WAP网关编码的二进制WML,而不是文本形式.这点是与HTML不同的地方.),那么它将首先显示第一个卡片,也就是"friends"卡片.
在UpPhone的模拟器上来看应该是图2-21和图2-22的样子:
图 2-21 第一张卡片
图 2-22 第二张卡片
在Nokia WAP Toolkit 1.2模拟器上来看应该是图2-23和图2-24的样子:
图 2-23 第一张卡片
图 2-24 第二张卡片
大小写敏感
无论是标签元素还是属性内容都是大小写敏感的,这一点继承了XML的严格特性,任何大小写错误都可能导致访问错误,这是WML设计开发者必须注意的问题.
定义变量
WML可以使用变量供浏览器和Script使用,通过在页面中的一个卡片上设置变量,其他卡片不必重新设置就可以直接调用.
变量的语法如下:
$identifier
$(identifier)
$(identifier:conversion)
如果变量内容包含空格就需要用圆括号括起来.由于变量在语法中有最高的优先级,包含变量声明字符的字符串会被当作变量对待,所以如果要显示"$",就一定要连续使用两个"$".看下面显示美元符号的例子.

Your account has $$15.00 in it.

Nokia WAP Toolkit 1.2的测试结果如图2-25所示:
图 2-25 显示美元符号
XML是一种语法非常严格的语言,WML也继承了这种规则,任何不规范语法都会导致错误.
六,动态输出WML页面
使用多种服务器端脚本语言动态输出WML页面
以下将要讲述的是使用各种服务器端脚本语言编写动态输出WML页面.这里主要以几种最常见服务器端编程方式为例子.其他的服务器端编程方式都可以依此类推.
无论使用哪种服务器端编程方式来动态输出WML页面,其关键就是输出Content-type为text/vnd.wap.wml.然后按照WML的语法格式输出WML内容就可以达到目的.当然其中针对不同的编程方式还有一些细节问题.
使用ASP动态输出WML页面
使用记事本输入下面的ASP程序(图2-26):

Hello

图 2-26 Hello.asp
保存为hello.asp.并且是它和hello.wml在同一个子目录下.注意:记事本在保存的时候只识别txt文件扩展名,因此在保存之后应该手工修改文件扩展名.为了方便起见,可以使用其他的文本编辑工具,或者是使用专门的ASP编辑工具(例如:Viusal InterDev).
启动IIS服务器管理.在"默认的Web站点"下找到"wap"目录,用鼠标右键点击它,选择属性"Properties",就会弹出一个对话框,里面有好多配置选项. 在"虚拟目录"标签页当中有一项应用程序设置.将"许可"一项设置为:"执行(包括脚本)".确定后,退出IIS Console.
打开WinWAP,马上Stop它,在URL栏里输入:"http://127.0.0.1/wap/hello.asp",并按下回车.等着欣赏第一个ASP页面(图2-27).
图 2-25 WinWAP测试结果显示
如果读者熟悉ASP,读者也许会注意到:为什么在并没有换行写.注意,这是必须的!否则,程序在WinWAP下可能没有任何问题,但是在其他模拟器上,可能就会导致编译错误!因为在前面不允许有多余的空格或者换行.
CGI编程时应该注意的问题
使用CGI程序生成动态WML页面和使用CGI编程生成动态HTML的方式基本一样.只是在返回WML页面前,先要输出Content-Type为text/vnd.wap.wml,然后再输出WML内容.
输出的返回格式:"Content-type: text/vnd.wap.wml/n/n".
使用标准C动态输出WML页面
这里有一个非常简单的标准C例子,该例子适合于Windows和Unix.
#include
#include
#include
#include
void GenerateCGIHeader();
void GenerateCGIFooter();
/*--------------------------------------------------------------*/
int main(int argc, char* argv[])
{
char tmpBuf[128];
char strGET[]="GET";
if (getenv("REQUEST_METHOD") == NULL)
{
printf("This script is not intended to run from shell./n");
return -1;
}
// Check that the request method is GET (see CGI specs)
strcpy(tmpBuf, getenv("REQUEST_METHOD"));
if (strcmp(tmpBuf, strGET) != 0)
{
printf("This script requires use of GET-method./n");
return -1;
}
/* Create a header for our reply */
GenerateCGIHeader();
/* Display operating system-style date and time. */
_strtime( tmpBuf );
printf( "OS time:%s/n", tmpBuf );
_strdate( tmpBuf );
printf( "OS date:%s/n", tmpBuf );
/* Create a footer for our reply */
GenerateCGIFooter();
return 0;
}
/*--------------------------------------------------------------*/
void GenerateCGIHeader()
{
/* Generate header for CGI response */
printf("Status: 200/n");
printf("Content-type: text/vnd.wap.wml/n/n");
printf("/n");
printf("/n");
printf("/n");
printf(" /n");
printf(" /n");
printf(" /n");
printf(" /n");
printf(" /n");
printf(" /n");
printf(" /n");
}
/*--------------------------------------------------------------*/
void GenerateCGIFooter()
{
/* Generate footer for CGI response */
printf(" /n");
printf(" /n");
printf("/n");
}
在Windows环境下,使用Viusal C&C++ 6.0创建一个Windows Console Application——WapCCGI.然后将该文件加入到项目中,编译生成WapCCGI.exe.将该可执行文件拷贝到wap子目录下.启动Nokia WAP Toolkit,在"Go"下选择"Open Location",并输入URL地址(图2-28):
图 2-26 输入URL地址
在选择"OK"以后,模拟器上出现系统当前的日期和时间(图2-29):
图 2-27 测试结果显示
使用Perl动态输出WML页面
对于Perl编程,其基本原理符合CGI编程原理.先看下面的程序片段:
# HTTP header with correct MIME type
print "Content-type: text/vnd.wap.wml/n/n";
# WML starts here with the correct XML doc type declaration
print "";
print "";
……
更多的Perl 代码,输出WML页面内容.
……
按照以上的程序开头便可以输出动态的WML页面.下面有一段更详细的教程,这个教程是为以下开发者准备的:
知道如何编写WML页面和卡片,并且了解自己的工作.
知道如何配置自己服务器,使之能够运行Perl.
有CGI的基本知识,并且了解Perl的语法.
从表面上来说,使用CGI来产生WML页面和产生HTML页面没有太大的区别.一旦读者仔细地看一下,就会明白WML所包含的新内容的确还是与其他的页面动态生成有所不同.
假设,老板需要做一个可以通过电话来访问电话目录.公司现在只有两个职员,但是将要不断扩大.因此,肯定不会去做一个固化的目录.相反将把数据保存在一个文本文件中,通过动态生成WML页面的来显示信息.
首先,将要建立一个"people_data.txt",如下所示:
# Format is:
# Name|phone num|fax num|Title
Linus Smith|123-4567|098-7654|Director of OS Development
Jane Doe|123-4568|098-7655|Senior VP of OS Research
可以看出"|"符号是用来区别字段的."#"是用来表示注释的.这些字符没有其他的意义,仅仅是一般的转换.
下面,需要决定最后的WML文件将是什么样子.在同老板商量之后,决定如下:

Welcome to Widgets Inc. Telephone Book
Click to view list

Linus Smith - 123-4567
Jane Doe - 123-4568

Director of OS development
Phone number: 123-4567
Fax number: 098-7654

Senior VP of OS research
Phone number: 123-4568
Fax number: 098-7655

每当增加新成员的时候,都不得不重新修改文件.这不是一个好办法.但是如果向文本文件中增加内容,那将是一个不会编写WML页面的程序员也会的事情.为了实现这个目标,使用以下的脚本:
#!/usr/bin/perl –w
use strict;
use CGI qw/:standard/;
# Our CGI object
my $q = new CGI;
以上的内容是设置Perl环境.使用CGI模块来进行HTTP数据显示和处理.然而在这个例子当中,将使用尽量少的CGI模块,读者将会在将来的教程当中明白处理服务是多么的复杂.
# data file to get info from
my $data = "people_data.txt";
# Template for the title card
my $title_card = qq (
Welcome to Widgets Inc. Telephone Book
Click to view list
);
# Initial id of the first record
my $id = "a";
这里已经创建了一个字符串,它将作为标题卡片.当然还有需要创建的动态ID.(选择'a',是因为它是一个简单的字符,可以很容易地增加)既然每个记录都有唯一的ID(因此可以把它作为头一个卡片).ID将从'a'开始,然后每找到一个新记录就增加一个.要一次性将所有的名字都生成卡片.然后使用一个初始化的缓冲区来显示成员的数据内容.
# Now iterate over the
data file building data dynamically
open(FILE,"$data") || die "Can't open $data: $!/n";
while () {
chomp;
next if (/^/#/);
my ($name, $phone, $fax, $position) = split(//|/);
打开自己的文件(当然要检查打开权限,保证能够打开),现在就可以读取了(注意:要跳过以"#"开头的行).其他的部分,只需要从已经定义和产生的文件中读取就可以了.显然在读取的过程当中,需要做一定的检查,保证每个部分的确有数据.
# Build up the view card
$view_card .= build_view_card($name, $phone, $fax, $position);
# Build up info cards
$all_info_card .= build_info_card($name, $phone, $fax, $position);
}
这里,将从文件中提取的数据传给两个函数.他们将返回由这些参数所确定的卡片.注意到Perl的".= "操作符,函数返回的字符串将不断地扩充.
# Finish off the card
$view_card .= " ";
my $header = qq (
);
# Template for the entire deck
my $deck = qq(
$header
$title_card
$view_card
$all_info_card
);
print $q->header('text/vnd.wap.wml');
print $deck;
这里非常简单地将他们绑在一起.打印文件头,建立卡片,并且将他们动态地放在一起.当做好这一切之后,需要输出一个Content-type头 text/vnd.wap.wml.
现在来看一下建立卡片的两个子过程:
sub build_view_card {
$id++;
my ($name, $phone, $fax, $position) = @_;
my $info_item = qq (
$name - $phone
);
return $info_item;
}
这个代码将接收信息,并把这些信息插入到一个简单的模板里面.一个非常重要的一点是每次都在增加"$id"变量的数值.这个保证每个记录都有唯一的id号.Perl允许直接使用"++"操作符,使得从'a'增加到'b'.
sub build_info_card {
# Template for card showing info for a single person
my ($name, $phone, $fax, $position) = @_;
my $info_card = qq (
$position
Phone number: $phone
Fax number: $fax
);
return $info_card;
}
在这个子过程当中,做了和前面一样的事情,只不过用了不同的模板.注意到已经在前面的函数中增加了"$id"的数值,因此,在这个函数中只需要返回一个新的卡片就可以了.
这就是全部过程,现在已经有了一个动态的电话本.当然这个教程不是一个很好的解决办法,至少他需要一个人手工来修改txt文件.另外,WML页面有大小的限制.但是无论如何,以上就是全部的过程.
使用PHP动态输出WML页面
请先看一个简单的PHP例子:
< php
header ("Content-Type: text/vnd.wap.wml");
echo "/n"
>

启动Nokia WAP Toolkit,在"Go"下选择"Open Location",并输入URL地址(图2-30):
图 2-30 输入URL地址
使用Nokia WAP Toolkit测试结果显示如下(图2-31):
图 2-31 测试结果显示
下面演示的是如何使用WML与PHP实现动态交互.演示的内容是:用户在WML页面中输入用户名和密码,然后提交给服务器端;服务器端将动态生成WML显示用户的输入,并返还到客户端.整个演示包括登录页面logon.wml和服务端脚本程序logon.php.
logon.wml

User:
Password:

logon.php
< php
header ("Content-Type: text/vnd.wap.wml");
echo "/n"
>

< php
echo "Hello ! $(user) /n";
echo "Password is $(password) /n";
>

启动Nokia WAP Toolkit,在"Go"下选择"Open Location",并输入URL地址(图2-32):
图 2-32 输入URL地址
在模拟器上出现(图2-33):
图 2-33 登录界面
在确定输入后(图2-34):
图 2-34 从服务器端返回的处理结果
使用Servlet动态输出WML页面
下面有两个简单的例子程序,先看第一个简单例子:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class WapServlet extends HttpServlet
{
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException
{
response.setContentType("text/vnd.wap.wml");
PrintWriter out = response.getWriter();
xmlHeader(out);
out.println("");
out.println("");
out.println("Hello! This comes from a servlet!");
out.println("");
out.println("");
}
public void xmlHeader(PrintWriter out)
{
out.println("");
out.println("");
}
}
下面是Nokia提供的一个例子程序:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
/*
* HelloWorldServlet - a very simple servlet
*/
public class HelloWorld extends HttpServlet
{
String m_text;
// the initialization parameter is read during
// the initialization of the servlet
public void init(ServletConfig config) throws ServletException
{
super.init(config);
m_text = config.getInitParameter("text");
if (m_text == null)
{
m_text = "This is a simple test servlet.";
}
}
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException
{
PrintWriter out = response.getWriter();
out.println("");
out.println("");
out.println("");
out.println("");
out.println("");
out.println(m_text);
out.println("");
out.println("");
out.println("");
// Remember to close the out object
out.close();
}
public String getServletInfo()
{
return "The simple HelloWorld servlet.";
}
}
使用JSP动态输出WML页面
先看一个简单的例子程序:

JSP Test:
Press accept to continue!

下面将要演示使用WML和Java Server API如何简单快速地在WAP终端上生成动态的WML页面.这里将不再去讲每个WML标记的作用,而是给出一个简单的例子.这个例子体现出整个语言的特点.
这个JSP例子显示了为一个移动用户定时更新约会的例子,例如:做一个给家里打电话的应用程序.这个应用是在Windows NT下使用Java Server Web Development Kit(JSWDK)1.01和JSWDK配套的服务端工具,来建立的JSP页面.使用Nokia WAP Toolkit 1.2测试和浏览应用.
一个典型的路径还包括在移动电话和WAP内容服务之间的一个WAP网关.这样安排的主要原因是要对WML进行编码,这样来适应其窄带的特点.但是Nokia WAP Toolkit包含了这样一个编译器,因此它可以直接从HTTP服务器提取WML内容(在例子里是从服务端工具上来取的).
当建立WAP应用的时候,必须记住一点.WAP设备的显示屏幕很小——典型的只有4行12个字符,不要使用过多的滚动.这样会使用户十分烦心.数据的输入功能也十分有限.而且设备的RAM有限,CPU的能力有限.并且现在无线网络的带宽有限而且高延时.因此WAP的应用程序应当短小,简单.
应用程序包括两个页面.第一个是"pick_appointment.jsp".它有一个选择卡片.当用户选择了其中的一个约会时间的时候,就会进入到"show_appointment_data.jsp"页面(中间还传递了约会的ID号).第二个页面有两个卡片.第一个显示会面的时间,第二个显示数据输入,允许工程师通过输入ID取消约会.
动态的约会数据是通过JavaBean的实例来取得的.在这里没有它的代码,总的来说是通过JDBC连接到数据库的过程.取消的过程是通过Servlet来操作的,在这里其程序也没有显示.既然用户可能随时取消某个约会,因此需要定时地刷新"pick_appointment.jsp".
pick_appointment.jsp

show_appointment_data.jsp

Check off this appointment
Back to appointments list

Back to appointment data

Back to appointments list

在每一文件的开头,都要设置正确的MIME文件类型.如果文件类型不对,那么这个页面将遭到模拟器的拒绝.在这个例子里,"text/vnd.wap.wml"表明是WML页面.其他类型例如"text/vnd.wap.wmlscript"是WMLScript源代码,而"image/vnd.wap.wbmp" 是WBMP文件.
既然WML页面是一个XML文档,因此它包含了标准的XML文件头和一个DTD头,但是""标记显然与JSP的标记有混合.因此将这一段隐藏到字符串变量当中.别忘记JSP将被编译成Java源文件,最后成为Servlet.
七,解决中文显示问题的四种方法
WML是XML的一种应用,而XML的缺省编码是UTF-8,也就是Unicode的8位编码方式.如果不特殊说明,那么XML将认为采用的是UTF-8的编码方式.这就造成了一个问题,几乎所有的文档内容都采用了GB2312方式,数据库中也不例外.而Unicode和GB2312的编码有很大的不同,可以说根本不一样,这是造成乱码的主要原因.
任何编码方式,包括日文,韩文,希腊文,阿拉伯文等都能轻松转换成Unicode.如果使用Unicode,就可以在同一段文档中加入各种语言.虽然现有的应用软件很少采用Unicode,但Windows NT的内核却采用Unicode来处理字符.Unicode方式有两个吸引人的个性:独立且宽容.
如何解决这些问题,现在常用的有以下的四种方法.
直接采用UTF-8编码
这种方法无需多讲.如果内容可以轻易转换到UTF-8编码还需要什么呢 坏处是需要对内容要进行全面的转换,而且与现有的大多数应用不兼容.
直接使用GB2132编码
这种方法也很简单,在编码声明时,标注采用GB2312编码方式,具体做法如:.但是并不是所有终端都支持GB2132编码,仍然会出现乱码.
笔者做开发的时候就是采用这种办法解决中文问题.当时公司采用的是Motorola公司的网关,使用Motorola L2000www,Nokia 7110和Simens 3568i进行测试.结果都十分满意.
如果使用这样的页面在Nokia WAP Toolkit上直接进行测试,将会发现Nokia WAP Toolkit将对中文进行自动编码,只是按照半个字节进行处理.因此出来之后就变成乱码了.
采用字符转换
其思想是用ASCII字符表现更大字符集中的字符.比如要展现希腊文的小写的alpha.alpha在Unicode的编码中是945,16进制就是3B1,于是写下"α"或者"α"显示的就是小写的"α".只需要知道汉字的Unicode编码,将其转换成"?XXXX;"的形式.用ASCII编码方式,任何平台都能处理,而且HTML也支持.但是这样就增加了文件长度.
配置应用服务直接输出UTF-8编码(适用于IIS)
在IIS的Response Object有一个属性CharSet,按微软的说法只要这么做就行:

这种方法,只适用于Windows NT下IIS的ASP编程.其他的平台和Web服务器就没有如此简单的方式.
GB2132转Unicode
Unicode的原理也很简单.使用"?"加上ASCII码的数值文本再加";"结尾.当然要注意的是:这里所指的ASCII数值并不是简单的内存数值(或者说是GB2132编码).例如:"饱"字,在内存里面的数值是0xb1a5,而在Unicode映射表内是0x9971.请先看下面的一段小程序.在WML页面中混有英文和中文.中文是采用Unicode书写的.

T;?

在Nokia WAP Toolkit中的测试结果为(图2-35所示):
图 2-35 使用Unicode的中文WML页面
可以看到"?"变成了"饱"字.如果用"?b1a5;"或者直接使用GB2132编码(相当于直接书写中文)那么显示结果就可能是图2-36所示的样子.肯定要问自己,怎么会这样!原因就是在这个位置上的Unicode编码字符是个怪字符.
图 2-36 没有使用Unicode的中文WML页面
对于英文字符可以使用Unicode方式,也可以不使用.那么Unicode编码如何获得呢
如果使用手工方式,那么可以在"附件"中找到"Unicode映射表".打开映射表,选择"宋体"和"CJK Unified Ideograph",在里面可以找到很多中文字符的Unicode编码.随便拷贝一个到WML文件中,百试百灵!就是使用的时候不是很方便.
如果使用Visual Basic脚本语言编写服务端程序(例如:ASP),那么问题就简单多了.可以使用AscW这个函数来解决编码的问题.以下的几个编码函数就是这样做的.
如果使用Visual C&C++编写服务端程序,那么必须使用到Windows的一个API函数:MultiButeToWideChar.这个函数可以实现Unicode的转换.
对于其他服务端脚本语言也应该有类似的函数.如果没有,那么就必须自己做一个转换工具,能把WML中的中文转换为Unicode.在MSDN提供的例子中有一个小的转换工具:Uconvert.但是好像不是很好用,不过可以研究里面的程序.在网络上有不少这样的实用小工具.
适用于ASP的转换程序
>
以下是您的UNICODE码:
第一个Basic程序
function unicode(str)
for i = 1 to Len(str)
c = Mid(str, i, 1)
unicode = unicode & "?" & Hex(AscW(c)) & ";"
next
end function
第二个Basic程序
function unicode(str)
dim i,j,c,i1,i2,u,fs,f,p
unicode=""
p=""
for i=1 to len(str)
c=mid(str,i,1)
j=ascw(c)
if j=0 and j<=128 then
if p="c" then
unicode=" "&unicode
p="e"
end if
unicode=unicode&c
else
if p="e" then
unicode=unicode&" "
p="c"
end if
unicode=unicode&"?"&j&";"
end if
next
end function
全部转换程序
<%
function unicode(str)
dim i,j,c,i1,i2,u,fs,f,p
unicode=""
p=""
for i=1 to len(str)
c=mid(str,i,1)
j=ascw(c)
if j=0 and j<=128 then
if p="c" then
unicode=" "&unicode
p="e"
end if
unicode=unicode&c
else
if p="e" then
unicode=unicode&" "
p="c"
end if
unicode=unicode&"?"&j&";"
end if
next
end function
function cutline(str,linelen)
dim i,j,c,k
cutline=""
j=0
for i=1 to len(str)
c=mid(str,i,1)
if asc(c)127 then
k=2
else
if asc(c)<32 then
k=0
if asc(c)=13 then
j=0
cutline=cutline+""+c
c=""
end if
else
k=1
end if
end if
j=j+k
if j>linelen*2 then
cutline=cutline+""+vbCrlf+c
j=k
else
cutline=cutline+c
end if
next
end function
function convertsymbol(sStr)
dim i,c
convertsymbol=""
for i=1 to len(sStr)
c=mid(sStr,i,1)
if c=">" then
convertsymbol=convertsymbol & ">"
elseif c="<" then
convertsymbol=convertsymbol & "47 and asctemp64 and asctemp96 and asctemp
八,动态输出WBMP
WBMP的格式
对于一个宽为16个像素,高15个像素的白色画面,WBMP文件的数据如下:
0x00,0x00,0x10,0x0f,0xff,0xff.……0xff.
头两个字节为0.第一个字节是文件类型,0表示非压缩的黑白图片.第二个是文件扩展,是保留字段.第三个字节为图片的宽.第四个字节图片的高.后面的都是图像数据.
对于非压缩的黑白图片,数据格式有以下特点:每个位对应着一个像素.0表示黑色,1表示白色.高位开始到底位结束对应着从左到右的像素颜色.数据从低地址到高地址对应着图片从上到下.一个字节可以表示8个像素,不足的部分可以用0补齐.
下面是一张太阳的图片:
0x00 //file type=0
0x00 //file extension 没有使用
0x14 //宽
0x14 //高
//Pixel data
0xfa,0xf5,0xf0,0xfb,0x6d,0xf0,0xfb,0xad,0xf0,0xfb,
0xdd,0x80,0x1b,0xfc,0x70,0xe7,0x1f,0xe0,0x7c,0xe7,
0xd0,0xbb,0xfb,0xd0,0xdb,0xfb,0xb0,0xd7,0xfd,0x70,
0xb7,0xfd,0xb0,0x77,0xf5,0xd0,0xfb,0xeb,0xe0,0xfb,
0xdb,0xf0,0x1c,0xe7,0x80,0xc7,0x1c,0x70,0xf7,0xfd,
0xf0,0xf7,0xbf,0xf0,0xf6,0x5d,0xf0,0xf5,0xed,0xf00
以下的两个程序都是要显示一个长为5高为2的WBMP图片.该图片第一行为白色,第二行为黑色.为此使用Nokia WAP Toolkit做了一个5*2的WBMP图片,上行是黑的,下行是白的.整个WBMP文件总共六个字节,所有的数据如下:
0x00 //file type=0表示黑白的非压缩方式
0x00 //file extension保留字段
0x05 //宽
0x02 //高
0x00 //第一行像素
0xf8 //第二行像素
由于宽为5不是8的倍数,因此右边的位使用0补齐.因此出现了第二行的0xf8,换成二进制就是:11111000.只有左边的五位是1,剩余的三位是0.
需要注意的是:在做测试之前需要在MIME文件类型映射表中加入相应的WBMP文件映射.
使用ASP动态输出WBMP图片
wbmp.asp
WML调用部分的程序如下:

启动Nokia WAP Toolkit,在"Go"下选择"Open Location",并输入URL地址(图2-37):
图 2-37 输入URL地址
在确认后,模拟器上出现图2-38:(短短的一条直线正是想要的WBMP!)
图 2-38 动态输出的WBMP图像
使用ISAPI动态输出WBMP图片
先使用Visual C&C++ 6.0的ISAPI Wizard生成一个工程文件——WBMP.在WBMP.cpp中找到Default(CHttpServerContext* pCtxt)函数.按照下面的形式进行修改:
void CWBMPExtension::Default(CHttpServerContext* pCtxt)
{
/*
StartContent(pCtxt);
WriteTitle(pCtxt);
*pCtxt << _T("This default message was produced by the Internet");
*pCtxt << _T(" Server DLL Wizard. Edit your CWBMPExtension::Default()");
*pCtxt << _T(" implementation to change it./r/n");
EndContent(pCtxt);
*/
AddHeader(pCtxt, "Content-type: image/vnd.wap.wbmp/r/n");
BYTE img[6]={0x00,0x00,0x05,0x02,0x00,0xf8};
CHtmlStream htmlStream;
htmlStream.Write(img,6);
*pCtxt<}
WML调用部分的程序如下:

启动Nokia WAP Toolkit,在"Go"下选择"Open Location",并输入URL地址(图2-39):
图 2-39 输入URL地址
在确认后,模拟器上出现图2-40所示的内容:(短短的一条直线正是想要的WBMP!)
图 2-40 动态输出的WBMP图像
九,定时器
介绍了如何使用定时器来实现动态刷新
WML中的ontimer事件有着很重要的意义.在实现自动刷新和动画方面很有用处.下面就要讲述如何使用ontimer事件来实现一个自动刷新的时钟程序.
在实现自动刷新的过程中一个十分重要的问题就是Cache.Cache在WAP中有很重要的作用,但是同时它也给程序编制人员带来了很多不方便.例如:当我反复地查询同一支股票信息的时候,如果不采取防止Cache的方法,那么结果只能是一个.这显然是不正确的.那么如何防止这种情况发生呢 在WAP问答中有详细的解答.但是这里将采用一种最简单的办法,那就是使得用户所产生的URL请求没有一次是相同的.即使出现相同,那么手机的内存无法保留那么多的页面内容.
时钟的例子程序如下:(需要注意到WML页面和动态生成程序)
Main.wml

Wait for a moment...

动态时钟程序的核心:
void CWAPExtension::GetTime(CHttpServerContext* pCtxt,int nID)
{
AddHeader(pCtxt,"Content-type: text/vnd.wap.wml/n/n");
*pCtxt<<_T("/n");
*pCtxt<<_T(" *pCtxt</n");
*pCtxt<<_T("/n");
CString strCard;
strCard.Format(_T("/n"),++nID);
*pCtxt<<(LPCTSTR)strCard;
CString strWait;
strWait.Format(_T(""),nID);
*pCtxt<<(LPCTSTR)strWait;
*pCtxt<<_T(" /n");
CTime tmCurrent=CTime::GetCurrentTime();
*pCtxt<<(LPCTSTR)tmCurrent.Format(_T("%Y-%m-%d/n"));
*pCtxt<<(LPCTSTR)tmCurrent.Format(_T("%H:%m:%S/n"));
*pCtxt<<_T(" /n");
*pCtxt<<_T(" /n");
*pCtxt<<_T("");
}
我们注意到nID在不断增加,那么就意味着nID就不可能相同.那么每次的URL就不会相同,手机每次必须去服务器取回内容.大家同时也注意到了ontimer的name怎么也在不断地改变呢 这个是一个很有意思的事情:在UpPhone和Nokia WAP Toolkit 1.2中,如果不改变这个ID,那么就只出现一次刷新,这是为什么呢 很简单,他们将timer这个变量做为全局变量保存了下来,再下一次进来的时候,忘记将timer的value重新赋值了.但是这也不是一个最好的解决办法.你会发现UpPhone在运行128次后就死掉了.为什么 因为每次不同,它都作为全局的timer,因此最多只能有128个timer.怎么办呢 最好的程序在下面:
void CWAPExtension::GetNext(CHttpServerContext* pCtxt,int nID)
{
nID=nID%67+1;
AddHeader(pCtxt,"Content-type: text/vnd.wap.wml/n/n");
*pCtxt<<_T("/n");
*pCtxt<<_T(" *pCtxt</n");
*pCtxt<<_T("/n");
*pCtxt<<_T("/n");
*pCtxt<<_T(" /n");
CString strGoTo;
strGoTo.Format(_T(" /n"),nID);
*pCtxt<<(LPCTSTR)strGoTo;
*pCtxt<<_T(" /n");
*pCtxt<<_T(" /n");
*pCtxt<<_T(" ");
*pCtxt<<_T(" ");
*pCtxt<<_T(" /n");
CString strImage;
strImage.Format(_T(" /n"),nID,nID);
*pCtxt<<(LPCTSTR)strImage;
*pCtxt<<_T(" /n");
*pCtxt<<_T(" /n");
*pCtxt<<_T("");
}
这个程序相比之下就好多了.但是在UpPhone上运行还是有问题.已经有同志使用这种方法实现了WAP电子地图的自动更新.
十,用户代理检
介绍了如何检测用户浏览器的类型.
User-Agent在URL申请头中有着重要的意义.可以用来判断用户代理的类型.通过检测用户代理,就可以针对不同的用户代理发送最适合的信息.在这里将要介绍一个Servlet小工具用来检测User-Agent,以及几种有特点的用户代理.当然该工具也适合于检测其他类型的HTTP头,源程序如下:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Snoop extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
response.setContentType("text/vnd.wap.wml");
PrintWriter out = response.getWriter();
out.println("");
out.println("");
String check=request.getParameter("check");
out.println("");
out.println(" ");
out.println(" ");
if(check.equals("Method"))
{
out.println(request.getMethod());
}
else if(check.equals("URL"))
{
out.println(request.getRequestURL());
}
else if(check.equals("Protocol"))
{
out.println(request.getProtocol());
}
else if(check.equals("ServletPath"))
{
out.println(request.getServletPath());
}
else if(check.equals("PathInfo"))
{
out.println(request.getPathInfo());
}
else if(check.equals("PathTranslated"))
{
out.println(request.getPathTranslated());
}
else if(check.equals("QueryString"))
{
out.println(request.getQueryString());
}
else if(check.equals("ContentLength"))
{
out.println(request.getContentLength());
}
else if(check.equals("ServerName"))
{
out.println(request.getServerName());
}
else if(check.equals("ServerPort"))
{
out.println(request.getRemoteUser());
}
else if(check.equals("RemoteUser"))
{
out.println(request.getRemoteAddr());
}
else if(check.equals("RemoteHost"))
{
out.println(request.getRemoteHost());
}
else if(check.equals("AuthType"))
{
out.println(request.getAuthType());
}
else
{
out.println(request.getHeader(check));
}
out.println(" ");
out.println(" ");
out.println("");
}
}
我在Catalina Server下调试通过.程序根据你选择的不同check选择项返回不同的信息.这个小工具对于在程序调试的时候是十分有用的.你可以在你的form中间加入一个check选择项,将action指向snoop就可以知道用户代理发送给服务器的所有内容,方便吧!
当你输入check=User-Agent的时候,那么返回的就是User-Agent的值.m3Gate只能在使用IE的时候才可以启动.UpPhone传回的数据最长.Nokia WAP Toolkit 1.2相比之下就比较简单.ccWAP居然就只有:WML Browser.其他类型的User-Agent值你可以在"浏览器列表"中找到!

[Guhao总结]wap个人建站[学习资料]相关推荐

  1. 开源一个微信+wap的建站系统

    开源一个微信+wap的建站系统 首先介绍一下此系统的几个重要功能: 1:完善的客服分流系统(对接阿里云旺),可实现手机端+网站端的客服即时通讯系统 2:独立的供货商系统(暂时不是很完善,没有独立出供货 ...

  2. 用最高效的方式下载B站学习资料!

    用最高效的方式下载B站学习资料! 毫不夸张地说,B站是全世界最良心的视频网站,不仅仅完全没有播放广告,更重要的是,在这里你几乎能找到你想了解的一切(当然,P站的部分业务除外). 然而,和所有其他视频网 ...

  3. php 开源建站工具 -- 资料收集

    迅睿 CMS 开源建站程序 XunRuiCMS https://www.xunruicms.com/

  4. 手机网站、移动网站、WAP网站建站 实例参考 经验分享

    随着移动端的逐渐兴起,由于移动端一般屏比较小,现有的在PC上使用的网站在移动端上显示效果非常不理想,很多已有PC网站的公司企业,为了获取大量移动端的客户,做个APP或移动网站对于业务开展还是非常有用的 ...

  5. 阿里云ECS静态建站学习

    访问网站步骤: 1. 输入域名 2. 自动调用DNS(域名服务器)将域名解析为IP地址 3. 浏览器通过IP地址找到服务器 4. 服务器返回网页至服务器 建网站基本步骤: 1. 申请一个独立域名 2. ...

  6. yjk的波库在哪里_盈建科学习资料 YJKEP弹塑性软件说明手册.pdf

    一.操作说明 1 机器配置要求 2 弹塑性时程分析流程 完整的弹塑性时程分析过程如下图所示,程序提供下图所有功能模块,计算完成后以图 形及表格的方式输出分析报告所用的数据. 分析与设计 线弹性分析 与 ...

  7. 盈建科弹性板6计算_盈建科学习资料 6弹塑性及接口.pdf

    可普及应用的弹塑性动力时程分析 操作简便.计算速度快.输出结果丰富 1 弹塑性动力时程分析 ? YJK主要做了两方面的工作: ? 一是做了Abaqus软件的前处理接口和后处理,前处理接口 就是把YJK ...

  8. wap建站程序_网站建设wap建站系统是什么?有什么优势?

    wap建站系统是专门用于制作手机网站.根据CNNIC最新统计数据显示,手机搜索引擎用户规模已经达7.61亿.要从移动端搜索引擎获取流量,肯定就要制作wap移动手机站点,手机网站可比PC站点开发起来技术 ...

  9. 【个人建站心得】wordpress页面真正静态化插件really static

    有好几周没来写博客了,不过每天都还会来博客园看看.前一阵子看同事建了个站,自己也摸索着看了些关于建站的资料,买了域名.空间,突击了些wordpress知识,开始搭起了属于自己的站(www.nhliwu ...

最新文章

  1. windows 程序员电脑设置
  2. .NET Core开发日志——HttpClientFactory
  3. android智能老人机系统,国产老人机也可以变智能!可运行Android
  4. Python 用pygame模块播放MP3
  5. 均分纸牌问题——(分治 + 贪心 + 前缀和 + 中位数 + 排序)
  6. 小程序wx.getRecorderManager()录音管理
  7. 变量存储list python_Python变量类型(八)
  8. 系统类配置(六) ubuntu16.04命令行安装Nvidia显卡驱动(操作指令详细注释版)
  9. Mangos导入AI的教学
  10. 动易模板制作示例(二)
  11. html如何算小于0判断错误,报错提示:直筋长度的计算结果小于0,计算公式为......
  12. Java 基础 —— Hello World
  13. pyltp安装教程——保姆级
  14. linux拼音五笔输入法下载软件,自已动手制作Linux下拼音五笔输入法
  15. 图像去雾去雨去模糊去噪
  16. 博客搭建六:绑定自己域名的方法
  17. 三本计算机专业考研211,一个三本学渣逆袭211的考研心得
  18. Shake Shack新店推出专为狗狗研制的冰激凌;素食“鱼肉”三明治挑战赛百味;植物肉品牌v2登陆中国市场...
  19. 【matplotlib + opencv】关于opencv和matplotlib绘制图像时,出现色差色偏的问题探讨,思考,解决。(深度学习数据包plt.imshow绘制的图像底色偏绿蓝偏黄)
  20. html表格打印填充分页,window.print()页面打印之表格内容分页填充进行分页打印

热门文章

  1. 2022春 哈工大《近世代数》期末考试卷A
  2. 微信电影票_百度百科
  3. VMware16安装Win10系统
  4. Python:让繁琐工作自动化
  5. 复习方法:为什么别人的CFA考试复习方法总是比你靠谱?
  6. cocos2dx实现单机版三国杀(二)
  7. 为什么996工作制只提互联网公司,其他行业没有吗?
  8. 网卡丢包,rx_missed_errors 大于0,是什么问题导致的?
  9. print.js分页,铺满纸张打印
  10. 2022年全球市场汽车用打气筒总体规模及应用细分研究报告