- 浏览: 7339530 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
对称密码学、非对称密码学(Symmetric Algorithm, Asymmetric Algorithm)
对称密码只有一个密匙,加密和解密都使用这个相同的密匙。非对称密码有两个密匙,一个作为公匙可以告诉其他人,一个作为私匙只有自己知道,用公匙加密的数据只能用私匙解密,用私匙加密的数据只能用公匙解密。
使用对称密码,通讯双方都需要知道密匙,为了验证身份,发送方可能需要把密匙传递给接收方,这种方式可能带来一些潜在的安全性问题。非对称密码中,A用自己的私匙加密数据然后发送出去,其他人如果能够用A的公匙解密数据,那就能知道这个数据一定来自A--不可抵赖性,一般用户数字签名中;如果其他人需要向A发送数据,可以使用A的公匙加密数据,这样加密后的数据只有A才能解密--保密性,这个用于确保通讯的机密性。使用非对称密码通讯的双方各自拥有自己的一对公匙和私匙,向对方发送数据时,使用对方的公匙加密,让对方用私匙进行解密。
对称密码学的算法简便高效,密匙短,但很难破译,加密解密速度快。非对称密码一般较弱一些,为了防止被破译,使用的密匙长度会比较长,例如128位、512位等,加密解密运算所需时间会比较长。为了改善通讯过程中安全性应用带来的性能问题,一般的做法是发送方先使用一个对称密匙对消息加密,然后使用接收方的公匙加密这个对称密匙,一起发送给接收方。接收方先用自己的私匙解密出对称密匙,然后再用对称密匙解密消息数据。这样在传输的信息比较大时,带来的改善是明显的。在X.509一节中可以看到这一运用。
数字签名
数字签名是公共密匙体制的另一种应用。A需要向B发送一段报文,首先A使用特定的Hash算法对要发送的报文取得一个一定长度(例如128位等)的 Hash值,这个Hash值称为数字摘要(Digital Digest)。Hash算法尽量保证不同的报文产生的摘要不相同,即如果发送的报文在中途被攻击者修改了,新的摘要跟原来的摘要就不相同。然后A使用自己的私匙对摘要进行加密,加密后的值称为数字指纹、数字签名(Digital Signature),A把这个数字签名和要发送的报文一起发送给B。B接收到内容后,取出数字签名和报文,使用A的公匙对签名解密,就得到原文的数字摘要,然后B使用相同的Hash算法对报文获取摘要值,比较这两个摘要值是否一致。如果验证成功,B能够确定两件事情:1. 数据的确是A发送的;2. 数据在发送过程中没有被修改过。
常见窃取、攻击场景简单描述
应用系统最普通的方式是使用用户名、密码认证,如果使用明文方式向服务器发送认证信息,窃取者在路由上很容易截取到用户名、密码。
为了防止攻击者截获到明文的密码,最简单的方式是将密码加密后传送。但这样攻击者截获到加密过的密码,他虽然不知道密码的原文,但如果使用加密过的密码字符串,仍然可以通过服务器的验证,这也是重放攻击(Replay Attack)的一种形式。解决方法是客户端每次使用一个随机序列跟密码一起加密,这样每一次加密后的结果都不一样;客户端同时把这个随机序列和加密后的值发送给服务器,服务器用同样的方法用原密码和随机序列进行加密,比较加密的结果和客户端发来的加密结果是否一致。
这样做还没有解决问题,因为攻击者仍然可以截获消息中的加密结果和随机序列,用以通过服务器验证,还需要添加另外一个处理:过期策略。除了随机序列之外,客户端在添加一个创建时间,把密码(Password)、随机序列(Nonce)、创建时间(CreatedTime)这三个因素一起加密,例如加密值=Base64(SHA-1(Password+CreatedTime+Password)),同样,客户端把加密值、随机序列Nonce、创建时间CreatedTime一起传给服务器。在服务器上验证机制有所改变。首先,客户端每一次请求的Nonce都使用一个唯一标识,不会重复。服务器维护一个已经被处理过的Nonce缓存,每次接收到消息先检查这个Nonce是否在缓存中存在,如果已经存在,说明这个消息已经被处理过了,决绝这一次请求服务;如果不存在,则把这个Nonce添加到缓存,然后处理请求。为了避免缓存的Nonce值越来越多,因此使用一个CreatedTime,并确定一个过期时间,例如5分钟之后过期,这样,服务器只需要保存5分钟之内、还没有过期的Nonce值。在重放攻击中,对于那些已经过期的消息中的认证信息,服务器会拒绝处理。如果通过上面两项检查,则服务器使用相同的算法Base64(SHA-1(Password+CreatedTime+Password)) 来验证认证信息。通过这样的处理,确保认证信息每一次加密的结果都不一样,并且只能被有效的使用一次。
X.509
详细的规范可以从http://www.rfc.net/,查询X.509。
不清楚WSE 3.0中具体是如何使用X.509,但大致的数字签名步骤如下,应当相差不多:
1. A准备好要传送的信息(明文)。
2. A对数字信息进行Hash运算,得到一个数字摘要(Digital Digest)。
3. A用自己的私钥对数字摘要进行加密,得到数字签名(Digital Signature),并将其附在信息上。
4. A随机产生一个加密密钥(DES密钥),并用此密钥对要发送的信息进行加密,形成密文。
5. A用B的公钥对刚才随机产生的加密密钥进行加密,将加密后的DES密钥连同密文一起传送给B。
6. B收到A传送过来的密文和加过密的DES密钥,先用自己的私钥对加密的DES密钥进行解密,得到DES密钥。
7. B用DES密钥对收到的密文进行解密,得到明文的信息。
8. B用A的公钥对A的数字签名进行解密,得到数字摘要。
9. B用同样的Hash算法对收到的明文进行Hash运算,得到一个新的数字摘要。
10. B将解密的数字摘要和自己运算的数字摘要进行验证是否一致。
对称密码学使用相同的密匙加密和解密消息,因此客户端和服务器端都存在密码保存问题,验证过程中存在密码信息直接或间接的传送,给这种机制带来一些不安全因素。正由于这样的因素,非对称密码学,尤其是X.509,目前被普遍运用在Internet的电子商务中。
Kerberos
RFC标准中Kerberos工作步骤如下:
1. Kerberos authentication service request (KRB_AS_REQ)
用户输入用户名、用户口令登录工作站机器,工作站向KDC(Key Distribution Center)的AS(Authentication Service认证服务)发送认证信息。认证信息只包含用户帐号,不包含用户口令。
2. Kerberos authentication service response (KRB_AS_REP)
AS为后面工作站与TGS(Ticket Granting Service票据授权服务)之间的通讯创建Session Key(会话口令)SK1,将客户端信息、TGS服务信息、SK1、时间戳、有效期等信息使用TGS的口令加密,生成TGT(Ticket Granting Ticket票据授权票)。同时KDC在用户帐号数据库中查询用户口令,将TGS服务信息、SK1使用用户口令加密打包。最后AS把加密包和TGT发送给工作站。
工作站接收到返回信息之后,使用用户登录时输入的用户口令对加密包解密,如果能成功解密,则表示通过了KDC的身份认证,并得到TGS服务信息和SK1,并且拥有了TGT。
第一点,用户口令只有用户与KDC知道,工作站向KDC认证的过程中并不将用户口令发送给KDC的AS,而是通过让工作站自己解密的方式来证明自己。如果工作站无法解密,它将无法与TGS通讯,从而无法使用其它应用服务和资源等。
第二点,AS给工作站颁发TGT,后面工作站将使用TGT向TGS请求其它应用服务,而无需再进行用户名、用户口令的验证,实现SSO。
第三点,TGS拥有自己的口令,这个口令只有TGS和AS知道,因此工作站虽然拿到TGT,因为是使用TGS的口令加密,其他人包括工作站并不能解密和篡改TGT中内容,它只需要在向TGS申请其它应用服务时发送这个TGT。
第四点,AS为工作站后面与TGS的通讯生成一个Session Key SK1,这个SK1在工作站与TGS之间共享,使得后面TGS与工作站通讯时,TGS能够对工作站这个客户端进行认证。上面已经看到工作站如何得到SK1,而AS并没有直接告诉TGS这个SK1,下面的步骤中你可以看到TGS如何得到SK1。
3. Kerberos ticket-granting service request (KRB_TGS_REQ)
工作站上的用户请求其它应用系统服务,例如邮件服务时,邮件客户端首先查询工作站上是否已经拥有邮件服务的Service Ticket(服务票据),如果没有则向TGS申请这个Service Ticket。
申请Service Ticket过程如下。工作站将客户端信息、要申请的服务信息(邮件服务)使用SK1加密生成一个验证器,与TGT一起发送给TGS。
TGS接收到工作站的请求后,使用TGS的口令对TGT解密,得到TGT中的内容。首先根据时间戳、有效期信息检查是否过期,如果没有过期,则使用SK1解密验证器,比较验证器中的客户端信息与TGT中的客户端信息是否一致。如果一致则表示这个请求通过了TGS的认证。
4. Kerberos ticket-granting service response (KRB_TGS_REP)
从验证器的解密内容中,TGS知道工作站是在申请邮件服务的Service Ticket。同样,TGS为工作站与邮件服务之间的通讯创建一个Session Key SK2,将客户端信息、邮件服务信息、SK2、时间戳、有效期等信息使用邮件服务的口令加密,生成邮件服务的Service Ticket。TGS将SK2使用SK1加密,把这个加密包和Service Ticket一起发送给工作站。
第一点,从上面3、4步骤中可以看出,TGS如何获得AS为它和工作站之间建立的会话口令SK1,并使用这个SK1对工作站的请求进行验证。同样的方式,TGS为工作站与邮件服务之间的通讯也创建一个会话口令SK2。
第二点,邮件服务拥有自己的口令,只有TGS与邮件服务自己知道。邮件服务的Service Ticket使用邮件服务口令加密,其他人包括工作站无法解密,只有邮件服务自己可以解开。
5. Kerberos application server request (KRB_AP_REQ)
接下来工作站得到TGS的响应消息,它得到了邮件服务的Service Ticket和一个加密包。工作站是使用SK1解开加密包,得到它与邮件服务器之间通讯的会话口令SK2。
然后工作站将客户端信息使用SK2加密,生成验证器,将验证器和邮件服务的Service Ticket一起发送给邮件服务器,请求邮件服务。
邮件服务接收到工作站的请求后,使用邮件服务口令解密Service Ticket,得到里面的内容。首先查看Service Ticket中的邮件服务信息,确认是否是在向自己请求服务。然后根据时间戳、有效期检查是否过期。如果没有过期,则使用SK2解密验证器,比较验证器中的客户端信息与Service Ticket中的客户端信息是否一致。如果上面的验证全部通过,则这个请求通过了邮件服务器的认证。
6. Kerberos application server response (optional) (KRB_AP_REP)
在RFC标准中,这一个步骤是可选的。应用服务处理完请求之后,如果需要向工作站发送信息,则将这些信息发送回工作站。
最后需要说明的是,在Kerberos V5中,为防止Replay Attack(重放攻击),上面对验证器的处理说得并不详细。首先采用一些处理使得每次验证器不一样。验证器本身有一个有效期,大概5分钟的样子。服务器上将建立一个验证器缓存,确保一个验证器在有效期之内只能被使用一次。
另外,RFC标准中KDC的AS和TGS可以是在一起,也可以是分开在不同的Server上。
通过上面的过程可以看出,Kerberos使用对称密码,而对称密码算法高效,密匙短但难以被破译,如果再采取一些其它措施,例如Strong Password(强密码)、密码有效期控制等,不考虑被集成的应用等其它因素,这种机制本身非常严密,机密性比较高。针对Kerberos机制的一些攻防场景,参考设计一个认证系统,这里有中文版本,不少地方翻译的不够准确。微软基于域环境实现Kerberos,详细的资料可以参考微软官方网站,例如,Kerberos Authentication Explained;How the Kerberos Version 5 Authentication Protocol Works。
由于实现Kerberos的机制、被集成的应用等各种原因,使得目前Kerberos只能在一个内网中使用,例如微软的域环境下。
发表评论
-
JUnit4.1源代码分析
2013-11-19 17:16 2371用JUnit4进行测试有两种方式分别是: (1)、命令 ... -
TestNG参数化测试之支持数据对象
2013-11-19 12:55 1747Junit4与TestNG对比 ... -
深入JUnit源码之Statement
2013-11-19 10:39 2467转载自: http://www.blogjava.net/ ... -
Junit4参数化测试
2013-11-15 17:25 1887现有这样 ... -
SWTBot中junit4通知RunNotifier的使用
2013-11-15 17:20 1651在junit4中的监听接口为Run ... -
[转] J2EE集群原理
2013-07-23 09:57 4536J2EE集群原理 什么是集群呢?总的来说,集群包括两个概念 ... -
实现ireport的JRDataSource接口的想法
2013-05-02 17:13 9517在使用Ireport的时候, ... -
[转]一次 applet 客户端打印 jasperreport 报表任务笔记
2013-05-02 16:31 2565一次 applet 客户端打印 jasperreport ... -
jasperreports报表Flash展现
2013-05-02 15:44 4656jasperreports在web上的报表展现方式有 ... -
Thrift与其他传输方式的比较
2013-04-03 12:15 27542Thrift 是什么? Thrift源于大名鼎鼎的fac ... -
【转】使用Atomikos Transactions Essentials实现多数据源JTA分布式事务
2013-04-03 12:11 6794Atomikos数据源配置方法有三种 Atomikos数 ... -
【转】Apache Thrift入门1-架构&介绍
2013-04-02 13:26 2039Thrift 是什么? Thrift ... -
【转】Thrift入门试用
2013-04-02 12:39 2182在新的项目中公司在平台内部系统间使用Thrift通讯,都没 ... -
【转】thrift的安装
2013-04-02 12:38 2092一、ubuntu下thrift的安装 1.下载源代码 ... -
[转]EJB3.0中的依赖注入,截获器及其在WebLogic Server 10中的扩展
2013-03-02 13:21 23241 前言 与EJB2.1相比,EJB3.0规范引入了两个重要 ... -
[转]通过struts2-ejb3-plugin把Struts2与EJB3.0整合
2013-03-02 13:01 2292本文是讲述使用struts2- ... -
jna使用入门
2012-12-20 14:39 2581JNA(Java Native Access )提供一 ... -
eclipse相关的问题
2012-12-12 11:01 1579打开eclipse后显示Error: co ... -
java并发编程实践笔记
2012-11-28 15:03 1567java并发编程实践笔记 ... -
java中 避免过多的使用同步
2012-11-22 15:41 2249避免过多的使用同步 ...
相关推荐
Microsoft WSE 3.0 Runtime.msi
**WSE3.0学习教程** ...总之,WSE3.0教程将引导你深入了解Web服务的安全性和可靠性,提供必要的技能来创建和维护高质量的Web服务。通过学习和实践,你将成为一名能够处理复杂Web服务场景的专业开发者。
**WSE3.0(Web Services Enhancements 3.0)**是微软推出的一个用于.NET Framework的增强型Web服务开发工具包,它为开发者提供了更高级别的安全性、互操作性和可扩展性。WSE3.0是针对WSE2.0的升级版本,主要目的是...
WSE3.0是微软推出的一个用于增强.NET框架下Web服务安全性的工具包,它提供了多种安全模型,包括基于令牌的身份验证、消息级安全等。 描述中同样提到“WSE3.0身份验证演示”,暗示我们可能会看到一个具体的示例或...
WSE 3.0 的主要目的是为了弥补 ASMX 在支持高级 Web 服务特性方面的不足。 #### 二、WSE 与 ASMX 的关系 - **ASMX**:ASMX 是 .NET Framework 级别上对 Web 服务的基本实现。它支持基本的规范(Basic Profile),...
WSE 3.0 特别针对安全性进行了大量的改进和增强,为用户提供了一种更加可靠、安全的方式来构建和部署 Web 服务。 #### ASP.NET 和 WSE 的关系 ASP.NET 作为微软提供的一种用于创建动态网页的技术框架,其在处理 ...
4. **启用WSE3.0安全功能**:通过引用WSE3.0的命名空间,可以启用如消息认证、加密等功能,确保通信的安全性。 5. **部署与测试**:发布Web服务到IIS服务器,然后可以通过VS2005自带的Web服务浏览器或独立的SOAP...
WSE 3.0是微软推出的一个用于.NET Framework的扩展库,其主要目的是增强基于SOAP的Web服务的安全性。WSE提供了多种安全机制,以防止数据在传输过程中被篡改或窃取,保障了服务的完整性和机密性。 1. **安全通信基础...
根据学习资料,自己开发的两个WSE3.0的学习实例:UsernameToken和X509Assertion,希望对大家有帮助。 注:在这里我将客户端和Web服务端份非别开发,所以有四个工程文件。 注2:最重要的是证书的位置!一定要配置好。...
Microsoft WSE 3.0,security
Windows Web Services Enhancements (WSE) 是微软推出的一个框架,用于增强.NET Framework应用程序的安全性和互操作性,特别是在Web服务方面。这个压缩包包含了WSE 2.0 SP3(Service Pack 3)和WSE 3.0的运行时组件...
Web Services Enhancements (WSE) 是由Microsoft开发的一个工具包,它为.NET Framework下的Web服务提供了额外的功能,特别是在安全性、可靠性和事务处理方面。WSE 3.0作为该系列的最新版本,进一步加强了这些功能,...
此外,`microsoft WSE 3.0 runtime下载 _wse3.0下载 - pc6下载站.url`是一个链接,指向了WSE 3.0更多的资源和教程,可能包括了安装问题的解决方案和更新信息。 **适用场景**: - 开发需要高度安全性的企业级Web服务...
WSE3.0是其中的一个版本,它着重于改进和扩展了基本的SOAP(简单对象访问协议)服务的安全性。在这个“Web Services Enhancements 3.0 Hands On Lab - Security”中,我们将深入探讨WSE3.0如何帮助开发者在构建Web...
loadrunner11安装时提示少了这个Microsoft WSE2.0 SP3 Runtime.msi ,这个可用。
1. **Web服务增强**(Web Services Enhancements):WSE是微软为.NET Framework提供的一个扩展库,用于增强ASP.NET Web服务的安全性和互操作性。WSE3.0支持WS-Security标准,该标准定义了如何在Web服务消息中添加...
WSE 3.0提供了安全的Web服务接口,用于与FileNet集成。 4. 安装Active Directory(AD) 需要安装Active Directory(AD)并建立域控制器。AD提供了身份验证和授权机制,用于FileNet的安全认证。 5. 安装DB2 DB2是...