摘要 dsml是一种基于xml和ldap的标记语言。 dsml2.0用xml文档为应用程序建立一种标准方法,来读取、查询和更新目录,它能够定义运行在移动设备或pda上的应用程序访问目录的方式,而且访问时无需专门的客户端。在实现dsml时,还必须考虑其安全性。在xml安全领域方面开发的规范有 xml 加密、xml 签名、xacl、saml、xkms。本文采用xml加密和签名来对dsml进行加密和数字签名。
关键词 dsml ldap xml加密 xml签名
1 dsml简介
由于xml(extensible markup language)使网络应用之间具有更好的互操作性,使网络管理员的工作更方便,使数据交换更简单,使重复利用内容更迅速,它的应用越来越广泛,已经成为一种用于因特网上交换数据非常有用的网络语言。ldap(lightweight directory access protocol)是访问信息服务的开放标准协议[1]。该协议基于tcp,可被用来访问独立目录服务器或x.500目录,它的最大的优势是:可以在任何计算机平台上,用很容易获得的而且数目不断增加的ldap的客户端程序访问ldap目录,而且也很容易定制应用程序为它加上ldap支持。
目录服务在管理各种资源之间关系的同时,提供了一个系统中命名、描述和查询信息和资源的最佳途径。目录可以存储和管理企业中各种类型的数据:如公司员工的电话号码薄和组织结构图、客户的联系信息、电子邮件、邮件路由信息、人力资源数据、公用密匙等。Www.133229.COMldap协议是跨平台和标准的协议。实际上,ldap得到了业界的广泛认可,因为它是internet标准,产品商很愿意在产品中加入对ldap的支持。通过把ldap目录作为系统集成中的一个重要环节,可以简化员工在企业内部查询信息的步骤。
dsml(directory services markup language)是ldap目录和xml相结合的标记语言,它利用xml来定义数据内容和目录结构并将它保存在分布式目录上。 dsml使开发人员可以简单方便地在internet上部署基于xml的应用。dsml的主要思想是允许xml程序员能访问ldap目录而不必写ldap接口或使用某些目录访问api如微软的活动目录服务接口(adsi)。
dsml由结构化信息标准推进组织(oasis)中的dsml工作小组开发,标准仍然很不成熟。dsml 1.0已于1999年完成,它提供了用xml来表达数据模型和目录结构的标准方法,它最大局限在于不支持目录的查询和更新。查询允许客户从目录中请求特定信息,如公司员工的姓名、电话号码等;更新指改变目录中的信息,如改变电话号码、删除记录、添加记录等。如要查询和更新目录,只能使用ldap接口或某些api如adsi。
dsml2.0草案标准于2001年12月发布[2],它用xml文档为应用程序建立一种标准方法,来读取、查询、更新和搜索目录。dsml2.0能够定义运行在移动设备或pda上的应用程序访问目录的方式,而且访问时无需专门的客户端;dsml2.0使程序员只用xml编程工具和技巧就可写出应用程序,而不需深入了解ldap。dsml1.0和dsml2.0在目录表示上的区别是:前者是表示目录的状态,而后者是表示ldap所执行的操作及操作所产生的结果。
dsml2.0的设计方法是用xml文档片段来表示ldap请求(request)和响应(response),这些xml文档片段用作绑定(binding)时的有效载荷,绑定定义了请求和响应的文档片段
是怎样以特定的方式(soap,smtp,普通文件)传输的。
清单1表示ldap请求元素batchrequest的xml文档片段。
<batchrequest xmlns:xsd=”/2001/xmlschema”
xmlns:xsi="/2001/xmlschema-instance";
xmlns="urn:oasis:names:tc:dsml:2:0:core">
<modifyrequest dn="cn=zhangsan, ou=myou, dc=testdomain, dc=com">
...
</modifyrequest>
<addrequest dn="ou=sales,dc=testdomain, dc=com">
...
</addrequest>
<delrequest dn="cn=lisi,ou=hr,dc=testdomain,dc=com">
<control>...</control>
<control>...</control>
</delrequest>
<searchrequest>
<control>...</control>
...
</searchrequest>
</batchrequest>
ldap响应元素的xml文档片段与请求相似。
由于dsml 2.0文档本身不解决用户的个人身份证明、授权问题。由于dsml 2.0规范刚发布,它的加密性,认证和授权等安全机制值得探讨。因为这三个方面对于任何的b2b来说都是很重要的。
安全性是个复杂的问题,dsml请求和响应无论采用soap、smtp或简单文件传输,都存在安全问题。若dsml 2.0文档不加密,在传输途中可能被窃听或被篡改;而且传输协议soap或smtp本身也不安全[3]。
2 网络安全要求以及存在的安全威胁
总的来说,网络安全的基本要求有[4]:
1)保密性:保证没有经过授权的用户,实体或进程无法窃取信息。在一个开放的网络环境里,维护信息机密是全面推广应用的重要保障。因此,要预防非法的信息存取和信息在传输过程中被非法窃取。
2)数据完整性:保证没有经过授权的用户不能改变或者删除信息,从而信息在传送的过程中不会被偶然或故意破坏,保持信息的完整、统一。因此,要预防对信息的随意生成、修改和删除,同时要防止数据传送过程中信息的丢失和重复
3)可用性:指合法用户的正常请求能及时、正确、安全地得到服务或回应。
4)非伪装性:指发送方能确信接收方不是假冒的。
5)反抵赖性: 保证信息的发送者不能抵赖或否认对信息的发送,当然信息发送前需要对发送者进行安全认证。要在信息的传输过程中为参与交易的个人、企业或国家提供可靠的标识。
目前网络存在的威胁主要表现在以下几个方面:
1)非授权访问:没有预先经过同意,就使用网络或计算机资源被看作非授权访问。它主要有以下几种形式:假冒、身份攻击、非法用户进入网络系统进行违法操作、合法用户以未授权方式进行操作等。
2)信息遗漏丢失:指敏感数据有意或无意被泄漏出去或丢失。
3)破坏数据完整性:以非法手段窃得对数据的使用权,删除、修改、插入或重发某些重要信息,以取得有益于攻击者的响应;恶意添加,修改数据,以干扰用户的正常使用。
4)拒绝服务攻击:是一种比较简单,但又日益流行的攻击和禁用企业信息资源的方法。在拒绝服务攻击中,作恶者发送大量的信息流量,使 web 服务器、主机、路由器和其它网络设备负担过重。通过这种方式发送的信息流量非常之大,致使企业的用户、客户和合作伙伴都在好长一段时间内无法访问网络。
基于以上的安全威胁以及网络安全的迫切要求,所采取的安全措施有加密技术(对称加密、非对称加密、不可逆加密等)、数字签名和认证技术、vpn技术、ipsec技术等。
由于还没有专门用于dsml安全的规范,因此本文采用w3c的xml规范(如xml digital signature, xml encryption)[5,6,7]来解决dsml安全问题。
3 dsml的加密和签名
xml 加密语法的核心元素是 encrypteddata元素,它是从 encryptedtype 抽象类型派生的。要加密的数据可以是任意数据、xml 文档、xml 元素或 xml 元素内容;加密数据的结果是一个包含或引用密码数据的 xml 加密元素。当加密元素或元素内容,encrypteddata 元素替换 xml 文档加密版本中的该元素或内容。当加密的是任意数据时,encrypteddata 元素可能成为新 xml 文档的根,或者可能成为一个子代元素。当加密整个 xml 文档时,encrypteddata 元素可能成为新文档的根。此外,encrypteddata 不能是另一个 encrypteddata 元素的父代或子代元素。
清单2 表示对清单1中modifyrequest和addrequest子元素进行加密的结果
<batchrequest xmlns:xsd=”/2001/xmlschema”
xmlns:xsi="/2001/xmlschema-instance";
xmlns="urn:oasis:names:tc:dsml:2:0:core">
<encrypteddata type=”/2001/04/xmlenc#element”
xmlns=” /2001/04/xmlenc”>
<cipherdata><ciphervalue>c86b12d79</ciphervalue></cipherdata>
</encrypteddata>
<delrequest dn="cn=lisi,ou=hr,dc=testdomain,dc=com">
<control>...</control>
<control>...</control>
</delrequest>
<searchrequest>
<control>...</control>
...
</searchrequest>
</batchrequest>
清单3为对清单1中batchrequest元素进行加密的结果。
<encrypteddata xmlns=” /2001/04/xmlenc”>
type=”/2000/09/xmldsig#”>
<signedinfo>
<canonicalizationmethod algorithm=”/tr/2001/rec-xml-c14n-20010315”/>
<signaturemethod algorithm=”/2000/09/xmldsig#dsa-sha1”/>
<reference uri=”#batchrequest”>
<transforms>
<transform algorithm=”/tr/2001/rec-xml-c14n-20010315”/>
</transforms>
<digestmethod algorithm=”/2000/09/xmldsig#sha1”/>
<digestvalue>p26wx3rvep00vktmup4ncduv5jil=</digestvalue>
</reference>
</signedinfo>
<signaturevalue>mc0cffrvltrlk=…</ signaturevalue>
<keyinfo>
<keyvalue>
<dsakeyvalue>
<p>…</p><q>…</q><g>…</g><y>…</y>
< /dsakeyvalue>
</keyvalue>
</keyinfo>
<object>
<signatureproperties>
<signatureproperty id="amadeuptimestamp" >
<timestamp xmlns="/rfc1889.txt";>
<date>20020305</date>
<time>12:55:34:34</time>
</timestamp>
</signatureproperty>
</signatureproperties>
</object>
</signature>
signedinfo 元素是实际签名的信息。canonicalizationmethod 标识了一种算法,该算法用来规范化 signedinfo 元素。signaturemethod 用于将已规范化的 signedinfo 转换成 signaturevalue 的算法。reference 的uri 属性标识要签名的数据对象。transforms 可以包括规范化、编码/解码、xslt 和 xpath 等操作。digestmethod 是在应用 transforms之后对数据应用以产生 digestvalue 的算法。digestvalue 的签名是将资源内容与签名者密钥绑定的机制。keyinfo 表示用于验证签名的密钥,标识机制可以包括证书、密钥名称和密钥协议算法。signatureproperties表示签名的属性,包括日期、时间等。
4 结束语
本文简要介绍了dsml语言,并讨论了用xml加密和签名的方法,并对其进行加密和签名。还可进一步对加密后的dsml进行xml签名,以及对soap请求和响应进行xml签名。限于篇幅,本文没作讨论。