摘要: 在ASP.NET、SQL Server、WCF等通信领域,微软都提供了基于SSL的安全保护机制。遗憾的是,.NET并没有对SSL协议本身提供像TCP、UDP这样的基础网络协议的编程性支持。如果想从协议的角度处理SSL通信或者想构建完整的SSL框架,那么.NET帮不上你,但是还有选择,许多第三方安全通信的项目提供了支持,比如OpenSSL。这不意味着我们在此领域将无所作为,第6章介绍了.NET中操作数字证书的两个类: q System.Security.Cryptography.X509Certificates.X509Certificate2类 q System.Security.Cryptography.X509Certificates.X509Store类 在Web开发中,SSL通信由浏览器和Web服务器来实现通信细节。封装了HTTP协议的WebRequest、WebResp 阅读全文
posted @ 2012-06-23 23:54 玄魂 阅读(6942) 评论(1) 推荐(3) 编辑
摘要: HTTPS(Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即在HTTP下加入SSL层,HTTPS的安全基础是SSL。它是一个URI scheme(抽象标识符体系),句法类同“http:体系”。用于安全的HTTP数据传输。“https:URL”表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。简单的HTTPS通信过程如图所示。 阅读全文
posted @ 2012-06-23 23:41 玄魂 阅读(5025) 评论(1) 推荐(3) 编辑
摘要: 事实上各位读者已经明白了SSL的工作原理,回顾我前面博客讲到的公钥加密的通信原理,而SSL使用的就是公钥加密系统。现在完全可以构想基于SSL的数据通信流程。前面说过,SSL是一种协议,本节重点在于协议本身和它是如何工作在各种协议之间来提供安全通信的。 SSL协议位于TCP/IP协议模型的网络层和应用层之间,使用TCP来提供一种可靠的端到端的安全服务,它使客户/服务器应用之间的通信不被攻击窃听,并且始终对服务器进行认证,还可以选择对客户进行认证。SSL协议在应用层通信之前就已经完成加密算法、通信密钥的协商,以及服务器认证工作,在此之后,应用层协议所传送的数据都被加密。 阅读全文
posted @ 2012-06-23 23:19 玄魂 阅读(25183) 评论(0) 推荐(5) 编辑
摘要: 到目前为止,只是讨论了访问控制规则,它们构成了对象的DACL。DACL可以由对象的所有者任意更改,还可以由所有者已经给予其更改DACL权限的任何人更改。对象的安全描述符包含另一个规则列表,称为系统访问控制列表(System Access Control List,SACL),该列表将控制系统对对象执行哪个类型的审核。 审核是一种具有安全敏感性的操作。在Windows中,审核只能由本地安全机构(Local Security Authority,LSA)生成,因为LSA是唯一允许向安全事件日志(这里存储了审核)中写入项的组件。安全审核是一项非常严谨的业务,可以在计算机法庭中根据事实分析谁做了什么事情,以及谁试图在系统中做什么事情。很多组织都长年保留它们的审核日志。不用说,规定对哪些项目进行审核的设置通常都受到严格的管理控制。如果执行该节中的代码并且遇到UnauthorizedAccessExcept 阅读全文
posted @ 2012-06-23 23:00 玄魂 阅读(1096) 评论(0) 推荐(1) 编辑
摘要: 为方便起见,访问规则被公开为集合。该集合是只读的,因此对它的规则进行的所有修改都必须通过FileSecurity对象的专用方法(例如AddAccessRule、SetAccessRule和RemoveAccessRule)执行。集合内部的规则对象也是不可改变的。要了解为什么拒绝规则优先于允许规则,必须知道访问检查算法是如何工作的。当执行访问权限检查时,将按照规则在访问控制列表内部出现的顺序对它们进行评估。在代码清单7-11中,当检查用户Xuanhun的访问权限时,会首先评估拒绝Xuanhun读取访问的规则,然后再评估授予BUILTIN\Everyone读取和执行访问权限的规则。一旦做出允许或拒绝的决策,评估就将停止。这就是拒绝规则“生效”的原因。如果它们被放置在允许规则之后,则它们不会总是执行它们的预期功能。 和可以添加新的访问规则一样,还可以移除现有的访问规则。但是注意,在从用户那里撤回某项权 阅读全文
posted @ 2012-06-23 22:53 玄魂 阅读(1405) 评论(0) 推荐(2) 编辑
摘要: 如何在创建文件的初始就分配权限呢?这样做有一个重要的安全原因:可确保安全的对象总是用一些默认的安全语义创建的。默认情况下,分层式资源管理器(例如文件系统或注册表)中的对象从其父对象中继承它们的安全设置,文件从它们的父目录中继承它们的安全设置。默认权利取决于所创建对象的类型,而且可能不是您所希望的那样。例如,您很少会有意创建每个人都具有完全访问权限的对象,但这却可能恰好是默认安全设置所指定的权限。不能简单地用默认安全设置创建对象并且在以后修改这些设置,产生此问题的原因是:在已经创建对象之后对其加以保护会打开一个机会窗口(在创建和修改之间),在此期间,该对象可能被劫持。劫持可能导致创建者失去对刚刚所创建对象的控制,这会造成灾难性的后果。代码清单7-10演示了在如何创建文件时配置访问规则。 阅读全文
posted @ 2012-06-23 22:44 玄魂 阅读(916) 评论(0) 推荐(1) 编辑
摘要: 权限的概念相信你已经不陌生了,那么如何设置一个文件的访问权限呢?编程可不可以实现动态的控制文件权限信息呢?答案是肯定的,.NET可以做到这些。本节会给您一个完整的演示。 自由访问控制列表(Discretionary Access Control List,DACL)(有时缩写为ACL)是一种 Microsoft Windows NT 和更高版本用于保护资源(例如文件和文件夹)的机制。DACL包含多个访问控制项(Access Control Entry,ACE)。访问控制项将一个主体(通常是一个用户账户或用户账户组)与一个控制资源的使用的规则相关联。通过DACL 和ACE,可以基于与用户账户关联的权限允许或拒绝资源的权限。例如,可以创建一个ACE,并将其应用于某个文件的DACL,以阻止除管理员以外的任何人读取该文件。 系统访问控制列表(System Access Control List,S 阅读全文
posted @ 2012-06-23 22:35 玄魂 阅读(2703) 评论(0) 推荐(1) 编辑
摘要: 非对称加密在理论上似乎比对称加密简单,但是在实际应用中的细节却复杂得多,为了能由浅入深地理解.NET中的非对称加密,本小节分步理解其中的细节。 非对称密钥 当使用一个非对称加密类创建一个该类的实例的时候,构造函数会生成一个“公钥/私钥”对。我们可以选择是否保存该密钥和保存的方式。 先从代码清单6-8的内容来熟悉下非对称密钥的密钥结构。 代码清单6-8 输出非对称密钥 阅读全文
posted @ 2012-06-23 22:08 玄魂 阅读(2989) 评论(1) 推荐(0) 编辑
摘要: 与对称加密算法相同,所有的非对称算法的相关类也存在于System.Security.Cryptography命名空间中。在该命名空间中,.NET框架提供了RSA、DSA、ECC、Differ-Hellman共四种非对称加密算法的实现。本节介绍其中几种主要的相关类和接口。具体应用的相关内容将在下一节进行介绍。 阅读全文
posted @ 2012-06-23 21:56 玄魂 阅读(2173) 评论(0) 推荐(1) 编辑
摘要: 基本流程很简单,那么公钥加密,私钥解密的算法原理到底是什么呢?本节简要阐述RSA算法、DSA算法、ECC算法、Diffie-Hellman算法的基本原理,其中涉及很多数论、离散数学以及解析几何方面的数学知识,感兴趣的读者可以借此加强相关理论基础。 阅读全文
posted @ 2012-06-23 21:47 玄魂 阅读(9600) 评论(2) 推荐(1) 编辑
摘要: 现在我们已经知道对称加密的一个最大的问题是如何安全地传输密钥,并且在对称加密的体系下找不到好的解决方案。1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是“公开密钥系统”。相对于“对称加密算法”这种方法也叫做“非对称加密算法”。 与对称加密算法不同,非对称加密算法需要两个密钥:公钥(publickey)和私钥(privatekey)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫做非对称加密算法。 阅读全文
posted @ 2012-06-23 21:35 玄魂 阅读(8370) 评论(2) 推荐(1) 编辑
摘要: 在使用.NET框架提供的加密算法实现类来执行加密任务时,需要准备加密密钥和初始化向量(Initialization Vector,IV)。基于对称加密的特点,在加密数据之后一定要保存好密钥和初始化向量,因为解密要用到它们。但是对于不同的数据加密,要使用不同的密钥和初始化向量,理论上每次新的加密过程都应该使用全新的密钥和初始化向量。 通常需要将加密密钥和初始化向量传递给另一个人,这时候需要使用非对称加密算法来加密密钥和初始化向量,然后在网络上传输。本节主要演示如何使用加密实践类,更多的应用内容会在本书的第四部分介绍。 那么如何创建加密密钥和初始化向量呢?有两种基本方法,一种是使用加密算法实现类的构造函数,另一种是使用GenerateIV()和GenerateKey()方法生成密钥和初始化向量。 阅读全文
posted @ 2012-06-23 21:28 玄魂 阅读(2584) 评论(1) 推荐(1) 编辑
摘要: 本节介绍System.Security.Cryptography名称空间中的对称加密类。 阅读全文
posted @ 2012-06-23 21:16 玄魂 阅读(2303) 评论(0) 推荐(1) 编辑
摘要: 经典的对称加密算法是DES算法,后来又衍生出3DES、TripleDES等增强型的DES算法。此外,.NET还提供了RC2、Rijndael等对称加密算法。下面分别详细介绍。 阅读全文
posted @ 2012-06-23 21:02 玄魂 阅读(11179) 评论(1) 推荐(3) 编辑
摘要: 对称加密是计算机加密领域最古老也是最经典的加密标准。虽然对称加密被认为不再是安全的加密方式,但是直到现在,我们还看不到它被淘汰的迹象。在很多非网络化的加密环境中,对称加密足以满足人们的需要。 对称加密采用单密钥加密方式,不论是加密还是解密都是用同一个密钥,即“一把钥匙开一把锁”。对称加密的好处在于操作简单、管理方便、速度快。它的缺点在于密钥在网络传输中容易被窃听,每个密钥只能应用一次,对密钥管理造成了困难。对称加密的实现形式和加密算法的公开性使它依赖于密钥的安全性,而不是算法的安全性。 阅读全文
posted @ 2012-06-23 20:26 玄魂 阅读(6916) 评论(0) 推荐(1) 编辑
摘要: 为了能更好地理解.NET基于角色的安全性,从一个最简单的实例导入角色的应用。首先创建一个简单的控制台程序,如代码清单1-1所示。 代码清单1-1 未添加角色验证的程序 阅读全文
posted @ 2012-06-23 18:16 玄魂 阅读(642) 评论(0) 推荐(2) 编辑
摘要: 代码组可以具有一些属性,这些属性可影响公共语言运行库确定程序集允许的权限集的方式。可应用到代码组的属性有两种:Exclusive和LevelFinal。 Exclusive属性,策略级别允许的权限集是与具有此属性的代码组关联的权限集。在考虑所有策略级别时,运行库向代码授予的权限绝对不会多于与Exclusive代码组关联的权限。在给定的策略级别内,代码只能是具有Exclusive属性的一个代码组的成员。在运行库计算独占代码组中的程序集的权限时,该属性会防止考虑同一策略级别中的其他代码组。但仍会计算当前级别之下和之下的策略级别。该属性允许一个特定代码组为当前策略级别针对向与该组匹配的程序集授予什么权限的问题做出唯一决定。这在需要向特定程序集授予特定权限集而不允许来自同一策略级别上的其他代码组匹配项的权限时很有用。 阅读全文
posted @ 2012-06-23 17:51 玄魂 阅读(456) 评论(0) 推荐(1) 编辑
摘要: 在创建代码组的过程中,简要熟悉了代码组的成员条件,在安全策略的实施过程中,可以认为,所有符合该代码组成员条件的程序集都属于该代码组。成员条件的实现形式是类型,每种成员条件对应一种类型。 阅读全文
posted @ 2012-06-23 17:29 玄魂 阅读(639) 评论(0) 推荐(1) 编辑
摘要: 代码组为我们提供了通过配置方式来实现代码访问安全性的途径。通过代码访问安全性策略工具——Caspol.exe,可以创建、删除、更改代码组。 代码组实质是一个条件表达式和一个权限集。如果程序集满足该条件表达式,那么就会被授予该权限集。每个策略级别的代码组集是按树的形式组织的。 代码组同时可以通过属性来说明如何定义安全策略。 对代码组的管理可以使用两个工具,一个是.NET Framework配置工具,一个是Caspol.exe。为了演示这两个工具的使用,对代码组的查看采用Caspol.exe,从命令行操作;对代码组的创建、修改和删除,使用.NET Framework配置工具从图形界面来操作。 阅读全文
posted @ 2012-06-23 17:06 玄魂 阅读(1037) 评论(1) 推荐(1) 编辑
摘要: 通过托管代码来管理CLR的方式,称为托管宿主。想实现托管宿主很简单,只要实现System.AppDomainManager类就可以了。AppDomainManager类的定义如代码清单1-1所示。 阅读全文
posted @ 2012-06-23 16:16 玄魂 阅读(1458) 评论(0) 推荐(1) 编辑