WSE3.0构建Web服务安全(2):非对称加密、公钥、密钥、证书、签名的区别和联系以及X.509 证书的获得和管理

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:
   上一节文章 WSE3.0构建Web服务安全(1):WSE3.0安全机制与实例开发,写处来以后感觉还是需要补充一下这个加密相关概念的文章,因为很多概念容易混淆,在理解 WSE3.0构建Web服务安全的时候遇到了麻烦。为了更好第学习 WSE3.0编程开发,我特地整理了 加密、公钥、证书、签名的知识点,来阐述这些概念的区别和联系,最后会详细介绍X.509 证书的信息,以及如何的获得X.509 证书和管理X.509 证书。全文结构如下1.非对称加密算法2.公钥和私钥、3.证书和签名、4.X.509 证书的获得和管理。5总结
    上一节里以及对.net类库提供的加密算法进行了介绍,下面我们了解详细了解一下非对称加密算法。
   【1】非对称 加密算法:
    非对称 加密算法又称为公钥加密算法,按照密码学的Kerckhoff原则:“所有算法都是公开的,只有密钥是保密的”。即安全系统的设计者不能指望使用某种秘密的无人知道的算法来保密,而应当使用一种公开的被验证过的算法——只要密钥是安全的,已知算法的攻击者实际上无法破解秘文的算法才是好的算法。 
   RSA算法是目前最流行的公钥密码算法,它使用长度可以变化的密钥。RSA是第一个既能用于数据加密也能用于数字签名的算法。RSA算法的原理如下:
    1.随机选择两个大质数p和q,p不等于q,计算N=pq;
    2.选择一个大于1小于N的自然数e,e必须与(p-1)×(q-1)互素。
    3.用公式计算出d:d×e = 1 (mod (p-1)×(q-1)) 。
    4.销毁p和q。
    最终得到的N和e就是“公钥”,d就是“私钥”,发送方使用N去加密数据,接收方只有使用d才能解开数据内容。
RSA的安全性依赖于大数分解,小于1024位的N已经被证明是不安全的,而且由于RSA算法进行的都是大数计算,使得RSA最快的情况也比DES慢上好几倍,这也是RSA最大的缺陷,因此它通常只能用于加密少量数据或者加密密钥。需要注意的是,RSA算法的安全性只是一种计算安全性,绝不是无条件的安全性,这是由它的理论基础决定的。因此,在实现RSA算法的过程中,每一步都应尽量从安全性方面考虑。
   非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。甲方只能用其专用密钥解密由其公用密钥加密后的任何信息。 非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要。
     【2】公钥和私钥:
    非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
    公钥加密:公钥加密使用一个必须对未经授权的用户保密的私钥和一个可以对任何人公开的公钥。公钥和私钥都在数学上相关联;用公钥加密的数据只能用私钥解密,而用私钥签名的数据只能用公钥验证.NET 通过抽象基类  (System.Security.Crytography.AsymmetricAlgorithm) 提供下列非对称(公钥/私钥)加密算法:
DSACryptoServiceProvider
RSACryptoServiceProvider
    因此公钥和私钥在非对称加密算法里是成对出现的,公钥公开出来用来加密数据,谁都可以使用这个公钥对自己传递的数据加密。私钥所有者通过自己的私钥对数据进行解密,私钥一般只有所有者知道,因此别人截获数据也无法破译信息的内容。
   【3】证书和签名:
        证书实际对于非对称加密算法(公钥加密)来说的,一般证书包括公钥、姓名、数字签名三个部分。证书好比身份证,证书机构(ca)就好比是公安局,职责就是负责管理用户的证书也就是身份证。
       比如我的公钥是FrankKey,姓名是Frank Xu Lei。公安局可以给我登记,但是怎么保证我和别的Frank Xu Lei区别开呢,于是公安局(证书机构)就使用我的名字和密钥做了个组合,再使用一种哈希算法,得出一串值,来标识我的唯一性,这个值就是我的身份证号码,也就是证书里的数字签名。 
         假设一个朋友给我写信,他就可以到公安局(证书机构)来查找我的身份证(证书)。上面包括我的个人信息,可以保证这个公钥就是我的。然后他把新建进行加密,邮寄给我。别人即使拆开我的信件,因为没有密钥进行解密,所以无法阅读我的信件内容。这样就保证了信息安全。 
    所以说加密不一定要证书,取决于你数据安全具体的需求。一般大型的电子商务网站都有自己特定的证书。证书管理的机构比较有名的就是VeriSign(可以说是互联网上的身份证管理局)。企业可以申请注册,它会给申请者生成特定的签名。 
我们自己的企业内部应用如果需要的话,可以在企业局域网内部建立企业私有的证书服务器,来产生和管理证书。 
    其实X.509是由国际电信联盟(ITU-T)制定的一种定义证书格式和分布的国际标准(相当于制作身份证的规范)。为了提供公用网络用户目录信息服务,并规定了实体鉴别过程中广泛适用的证书语法和数据接口, X.509 称之为证书,或者说是身份证的一种形式,类似与我们现在的二代身份证,也是身份证的一种,根据特定的标准制作出来的。 另外证书使用的时候还有有效期的限制,和我们的身份证的10年有效期一样。证书也可以设置有效期。
   【4】X.509 证书的获得和管理:
    【4.1】免费数字证书:获得免费数字证书的方法有很多,目前国内有很多CA中心提供试用型数字证书,其申请过程在网上即时完成,并可以免费使用。下面提供一个比较好的站点,申请地址为 https://testca.netca.net/。注意只有安装了根证书(证书链)的计算机,才能完成申请步骤和正常使用。 推荐另外一个可以免费申请证书的 CA http://www.cacert.org/

    【4.2】 CA 获得:商业应用最好从证书的签发机构 CA 获得证书,比如 VeriSign证书服务机构 ,这样商业 CA服务机构 的证书已经广泛使用,有的系统默认为可信任的证书签发机构。但是证书需要付费。
    【4.3】 windows Server 2003 证书服务 windows Server 2003 中安装证书服务器,这样 windows Server 2003 服务器即可当做一个证书服务机构 CA ,可以申请签发证书。也就是私有的身份证办法和制作机构,好比很多企业里的胸卡,HR就可以自己制作,但是使用范围只限制在企业内部。
    【4.4】 makecert 工具
微软在.Net F ramework 重集成 了一个生成 X.509 数字证书的命令行工具 Makecert.exe 。使用的的命令行在VS2005命令行窗口里启动,输入一下参数
makecert -sr CurrentUser -ss My -n CN=FrankCertificate -sky signature -pe
可以残生以个签名的密钥。运行时候可以得到相应的操作提示:如图
 
-sr CurrentUser  --       证书存储位置。 Location  可以是  currentuser (默认值)或  localmachine
-ss My  --                    证书存储名称,输出证书即存储在那里。 My 表示保存在“个人”
-n CN=MyTestCert --     证书名称。此名称符合  X.500  标准。最简单的方法是在双引号中指定此名称,并加上前缀  CN= ;例如, "CN=FrankXu"
-sky exchange --          指定颁发者的密钥类型,必须是  signature exchange  或一个表示提供程序类型的整数。默认情况下,可传入  1  表示交换密钥,传入  2  表示签名密钥。
-pe --                          私钥标记为可导出。这样私钥包括在证书中。
这个命令生成一个名字为 FrankCertificate 的证书,被保存到了当前用户的个人证书存储区内。一般我们自己开发使用的Windows证书服务来管理和获取证书。
 
  
    【5】总结:
    通过以上的学习,不知道你清除了非对称 加密、公钥、密钥、证书、还有签名的之间的区别和关系没有。在说明证书概念的时候我使用身份证做了类比,并把证书服务机构和管理身份证的公安局做比较来阐述证书的概念。最后基于上面证书概念的理解,本文又详细介绍X.509 证书的相关的知识,以及如何的获得X.509 证书和管理X.509 证书。
   希望本文能对你的安全知识的学习和网络安全编程提供帮助。有问题的园友也可以继续留言交流,我会尽我所知与大家交流和分享我的学习心得。后面我会继续准备《 WSE3.0构建Web服务安全》的第3节,如何使用WSE3.0 策略配置来实现密码加密与验证。有兴趣的朋友可以继续关注~    
参考资料:
1.AsymmetricAlgorithm ,MSDN




 本文转自 frankxulei 51CTO博客,原文链接:http://blog.51cto.com/frankxulei/320492,如需转载请自行联系原作者

相关文章
|
14天前
|
SQL 安全 前端开发
PHP与现代Web开发:构建高效的网络应用
【10月更文挑战第37天】在数字化时代,PHP作为一门强大的服务器端脚本语言,持续影响着Web开发的面貌。本文将深入探讨PHP在现代Web开发中的角色,包括其核心优势、面临的挑战以及如何利用PHP构建高效、安全的网络应用。通过具体代码示例和最佳实践的分享,旨在为开发者提供实用指南,帮助他们在不断变化的技术环境中保持竞争力。
|
16天前
|
PHP 开发者
深入浅出PHP:构建你的第一个Web应用
【10月更文挑战第35天】在数字时代的浪潮中,掌握编程技能已成为通往未来的钥匙。本文将带你从零开始,一步步走进PHP的世界,解锁创建动态网页的魔法。通过浅显易懂的语言和实际代码示例,我们将共同打造一个简单但功能强大的Web应用。无论你是编程新手还是希望扩展技能的老手,这篇文章都将是你的理想选择。让我们一起探索PHP的魅力,开启你的编程之旅!
|
18天前
|
缓存 前端开发 JavaScript
构建高性能与用户体验并重的现代Web应用
构建高性能与用户体验并重的现代Web应用
32 5
|
16天前
|
开发框架 前端开发 JavaScript
利用Python和Flask构建轻量级Web应用的实战指南
利用Python和Flask构建轻量级Web应用的实战指南
49 2
|
15天前
|
数据库 Python
从零开始构建你的第一个Flask Web应
从零开始构建你的第一个Flask Web应
|
8天前
|
SQL 安全 算法
网络防御的艺术:探索安全漏洞、加密技术与培养安全意识
【10月更文挑战第42天】在数字时代的浪潮中,网络安全已成为我们不可忽视的盾牌。本文将带您深入探索常见的网络漏洞、加密技术的奥秘以及如何提升个人和组织的安全意识。我们将通过实际案例分析,揭示黑客攻击的策略和防御方法,同时提供实用的安全建议,旨在为读者打造一道坚固的网络安全防线。
69 56
|
4天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的知识,并提供一些实用的技巧和建议,帮助读者更好地保护自己的网络安全和信息安全。
|
4天前
|
安全 算法 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在当今数字化时代,网络安全和信息安全已经成为了全球关注的焦点。随着技术的发展,网络攻击手段日益狡猾,而防范措施也必须不断更新以应对新的挑战。本文将深入探讨网络安全的常见漏洞,介绍加密技术的基本概念和应用,并强调培养良好安全意识的重要性。通过这些知识的分享,旨在提升公众对网络安全的认识,共同构建更加安全的网络环境。
|
4天前
|
SQL 安全 算法
网络安全的隐形盾牌:漏洞防御与加密技术
在数字化时代,网络安全成为保护个人隐私和公司资产不可或缺的一部分。本文将探讨网络安全中的常见漏洞、加密技术的重要性以及提升安全意识的必要性。通过分析不同类型的网络攻击案例,我们将了解如何识别和应对这些威胁。同时,文章还将介绍基础的加密技术概念,并通过代码示例展示如何在实际中应用这些技术来保护数据。最后,讨论为何提高个人和组织的安全意识是防范网络威胁的关键。
|
6天前
|
SQL 监控 安全
网络安全的盾牌与利剑:漏洞防御与加密技术解析
在数字时代的洪流中,网络安全如同一场没有硝烟的战争。本文将深入探讨网络安全的核心议题,从网络漏洞的发现到防御策略的实施,以及加密技术的运用,揭示保护信息安全的关键所在。通过实际案例分析,我们将一窥网络攻击的手段和防御的艺术,同时提升个人与企业的安全意识,共同构筑一道坚固的数字防线。
下一篇
无影云桌面