zhixin's profileMYspace.comPhotosBlogLists Tools Help

Blog


    June 21

    WES实践(续)

    以上说了那么多名词,一点没提到WSE本身,为什么? 因为我觉得没搞清楚基础的东西,看WSE就是一头雾水。
    再说一下WS-Security(WS-S)和SOAP,webservice(WS)
    WS-S是为了WS环境下对安全的需要和WS使用SOAP(XML 格式)作为消息封装协议的背景下提出的规范,其中包括XML Encryption、XML Digital Signature、与SAML(XML格式的Security Token)三套规范。WS-S既是套公共的规范,那具体在各个公司的实现就会不一样了,于是有了WSE,微软为.net环境提供的符合ws-s规范的插件,提供.net下开发和WS通讯的安全,java方也有WSS4J。
    下面是使用ws-security来加密soap的格式
    <S:Envelope>
        <S:Header>
           <wsse:Security>
             <!-- Security Token -->
             <wsse:UsernameToken>
                     ...
             </wsse:UsernameToken>
             <!-- XML Signature -->
             <ds:Signature>
                     ...
               <ds:Reference URI="#body">
                     ...
             </ds:Signature>
             <!-- XML Encryption Reference List -->
             <xenc:ReferenceList>
                 <xenc:DataReference URI="#body"/>
             </xenc:ReferenceList>
           </wsse:Security>
        </S:Header>
        <S:Body>
           <!-- XML Encrypted Body -->
           <xenc:EncryptedData Id="body" Type="content">
                     ...
           </xenc:EncryptedData>
        </S:Body>
    </S:Envelope>
    以上是一个典型的使用WS-Security协议来保证SOAP消息安全的例子。从中可以看出WS-Security协议主要对SOAP消息的Head部分做了扩展---加入了wsse:Security元素。其中针对安全的三个方面Authentication, Integrity, Confidentiality分别定义了Security Token, XML Signature以及XML Encryption Reference List三个子元素。而在SOAP包中的需要加密的业务内容(通常会加密整个Soap Body)被经过XML Encryption处理过的元素(EncryptedDate)所替代。
    WSE 3.0中六种交钥匙声明:
     • AnonymousOverCertificateAssertion 
     • CertificateMutualAuthenticationProfileAssertion 
     • MutualCertificateAssertion 
     • UsernameOverTransportAssertion 
     • UsernameOverCertificateAssertion 
     • KerberosAssertion
     
     
    June 15

    异构环境中WES的实践(整理中...)

      最近公司要求在Java和.net的异构环境下使用webservice加密,我就研究了一下.net端下的WSE3.0的部分使用。
    经过几个星期的试验和无数次google下,整理以下内容以理清思路,巩固学到的知识。万一有人今后google至次也算有个小结可观。先补一下基础知识。
    一.非对称加密:有两个密钥,公开密钥分发给传送端加密;私有密钥保存在接受端解密。如在传输中给第三方截获,由于没有私钥,无法解密!最广泛的公钥系统是由Rivet、Shamir、Adelman提出的(简称为RSA系统),非对称加密是现在最重要的加密方法,可应用于许多场合。
    二.对称加密:对称算法只有一个密钥,加密解密都要使用,典型的算法是DES。
    (非对称加解密算法十分复杂,耗费计算机时间,对称算法相对简单,加解密速度很快,所以通常在安全协议过程中,认证部分使用非对称算法,保证安全,传输数据部分使用对称算法,保证速度。)
    三.PKI: (Public Key Infrastructure-公钥基础设施),用于Internet安全,PKI技术采用证书管理公钥,通过第三方的可信任机构--认证中心CA(Certificate Authority),把用户的公钥和用户的其他标识信息(如名称、e-mail、身份证号等)捆绑在一起,在Internet网上验证用户的身份。目前,通用的办法是采用建立在PKI基础之上的数字证书。
    四.数字证书: 由权威机构(CA)颁发的互联网通讯中标志通讯各方身份信息的一系列数据。并遵循 ITUT X.509国际标准。
    包括:
    1.证书的版本信息;
    2.证书的序列号,每个证书都有一个唯一的证书序列号;
    3.证书所使用的签名算法;
    4.证书的发行机构名称,命名规则一般采用X.500格式;
    5.证书的有效期,现在通用的证书一般采用UTC时间格式,它的计时范围为1950-2049;
    6.证书所有人的名称,命名规则一般采用X.500格式;
    7.证书所有人的公开密钥;
    8.证书发行者对证书的签名
    五.数字签名: 功能主要包括3个方面:保证信息传输过程中的完整性、发送者身份认证和防止交易中的抵赖行为发生。数字签名使用的是发送方的密钥对,发送方用自己的私有密钥进行加密,接收方用发送方的公开密钥进行解密,是一个一对多的关系,任何拥有发送方公开密钥的人都可以验证数字签名的正确性。
    六. 数字加密:则使用的是接收方的密钥对,是多对一的关系,任何知道接收方公开密钥的人都可以向接收方发送加密信息,只有唯一拥有接收方私有密钥的人才能对信息解密。
    (数字签名只采用了非对称密钥加密算法,它能保证发送信息的完整性、身份认证和不可否认性,而数字加密采用了对称密钥加密算法和非对称密钥加密算法相结合的方法,它能保证发送信息保密性)
    七.SSL:安全套接层协议,提供点对点的传输层的保护,而不是在消息层面SSL也是使用非对称加解密算法实现的。
    八.SOAP: 这个其实也不用说了,webservice通讯使用的协议,其实就是xml通过http方式的远程数据调用。
    九.WS-security: IBM和Microsoft等公司共同制定的如何将XML Security(XML Signature和XML Encryption)与已有的安全技术(Kerberos,X.509,SAML)结合, 并把它们绑定到SOAP中的规范。简单说就是SOAP通讯中一组通用的安全规范。
    一○. SOA: 面向服务的架构,我认为这个就是软件发布在internet上,可被其它软件调用的架构。称为这种相互调用为服务。目前普遍采用Web Services作为其实现技术。
     
    搞清以上的名词可以这样理解,一,二都只是些加密的方法。当然网络上光有加密方法谁知道你是谁,要在网络上通讯安全,有保证,相互信任,就需要一些“证书”,那就是三,四,它们包括了一,二外还有一些附加信息如用户名,有效时间等等。至于五,六那是这些“证书”在网络上处理验证的方法。八和九是实际webservice通讯中使用到的规范,它们也用到了前面的“证书”和验证的方法。10就是一个更大的软件设计结构了