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

简介:
   上一节文章 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,如需转载请自行联系原作者

相关文章
|
11天前
|
编解码 前端开发 JavaScript
构建高效响应式Web界面:现代前端框架的比较
【4月更文挑战第9天】在移动设备和多样屏幕尺寸盛行的时代,构建能够适应不同视口的响应式Web界面变得至关重要。本文深入探讨了几种流行的前端框架——Bootstrap、Foundation和Tailwind CSS,分析它们在创建响应式设计中的优势与局限。通过对比这些框架的栅格系统、组件库和定制化能力,开发者可以更好地理解如何选择合适的工具来优化前端开发流程,并最终实现高性能、跨平台兼容的用户界面。
|
12天前
|
前端开发 JavaScript 关系型数据库
从前端到后端:构建现代化Web应用的技术探索
在当今互联网时代,Web应用的开发已成为了各行各业不可或缺的一部分。从前端到后端,这篇文章将带你深入探索如何构建现代化的Web应用。我们将介绍多种技术,包括前端开发、后端开发以及各种编程语言(如Java、Python、C、PHP、Go)和数据库,帮助你了解如何利用这些技术构建出高效、安全和可扩展的Web应用。
|
27天前
|
安全
网易web安全工程师进阶版课程
《Web安全工程师(进阶)》是由“ i春秋学院联合网易安全部”出品,资深讲师团队通过精炼的教学内容、丰富的实际场景及综合项目实战,帮助学员纵向提升技能,横向拓宽视野,牢靠掌握Web安全工程师核心知识,成为安全领域高精尖人才。 ## 学习地址
23 6
网易web安全工程师进阶版课程
|
3天前
|
SQL 安全 Go
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
在Python Web开发中,确保应用安全至关重要,主要防范SQL注入、XSS和CSRF攻击。措施包括:使用参数化查询或ORM防止SQL注入;过滤与转义用户输入抵御XSS;添加CSRF令牌抵挡CSRF;启用HTTPS保障数据传输安全;实现强身份验证和授权系统;智能处理错误信息;定期更新及审计以修复漏洞;严格输入验证;并培训开发者提升安全意识。持续关注和改进是保证安全的关键。
10 0
|
5天前
|
数据库 开发者 Python
Python中使用Flask构建简单Web应用的例子
【4月更文挑战第15天】Flask是一个轻量级的Python Web框架,它允许开发者快速搭建Web应用,同时保持代码的简洁和清晰。下面,我们将通过一个简单的例子来展示如何在Python中使用Flask创建一个基本的Web应用。
|
9天前
|
JavaScript 前端开发 API
Vue.js:构建高效且灵活的Web应用的利器
Vue.js:构建高效且灵活的Web应用的利器
|
10天前
|
云安全 数据采集 安全
阿里云安全产品,Web应用防火墙与云防火墙产品各自作用简介
阿里云提供两种关键安全产品:Web应用防火墙和云防火墙。Web应用防火墙专注网站安全,防护Web攻击、CC攻击和Bot防御,具备流量管理、大数据防御能力和简易部署。云防火墙是SaaS化的网络边界防护,管理南北向和东西向流量,提供访问控制、入侵防御和流量可视化。两者结合可实现全面的网络和应用安全。
阿里云安全产品,Web应用防火墙与云防火墙产品各自作用简介
|
10天前
|
SQL 安全 PHP
CTF--Web安全--SQL注入之Post-Union注入
CTF--Web安全--SQL注入之Post-Union注入
|
17天前
|
编解码 前端开发 开发者
构建响应式Web界面:Flexbox与Grid布局的深度对比
【4月更文挑战第4天】 在现代前端开发中,构建灵活且响应式的用户界面是至关重要的。随着移动设备浏览量的增加,能够适应不同屏幕尺寸和分辨率的布局技术变得必不可少。Flexbox和Grid是CSS提供的两种强大的布局机制,它们各自以独特的方式解决了响应式设计的挑战。本文将深入探讨Flexbox和Grid的核心概念、使用场景和性能考量,为开发者提供在面对不同布局需求时做出明智选择的依据。
|
27天前
|
安全 测试技术 网络安全
Web安全基础入门+信息收集篇
学习信息收集,针对域名信息,解析信息,网站信息,服务器信息等;学习端口扫描,针对端口进行服务探针,理解服务及端口对应关系;学习WEB扫描,主要针对敏感文件,安全漏洞,子域名信息等;学习信息收集方法及实现安全测试,能独立理解WEB架构框架,树立渗透测试开展思路!
18 0
Web安全基础入门+信息收集篇