文章由阮一峰翻译,作者为 David Youd。用图片通俗易懂地解释了,”数字签名”(digital signature)和”数字证书”(digital certificate)到底是什么。
  原文网址:http://www.youdzone.com/signature.html
  阮一峰:http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html

1.
  

  鲍勃有两把钥匙,一把是公钥,另一把是私钥。

2.
  

  鲍勃把公钥送给他的朋友们—-帕蒂、道格、苏珊—-每人一把。

3.


  苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就可以达到保密的效果。

4.
  

  鲍勃收信后,用私钥解密,就看到了信件内容。这里要强调的是,只要鲍勃的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。

5.
  

  鲍勃给苏珊回信,决定采用”数字签名”。他写完后先用Hash函数,生成信件的摘要(digest)。

6.
  

  然后,鲍勃使用私钥,对这个摘要加密,生成”数字签名”(signature)。

7.
  

  鲍勃将这个签名,附在信件下面,一起发给苏珊。

8.
  

  苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。

9.
  

  苏珊再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过。

10.
  

  复杂的情况出现了。道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。此时,苏珊实际拥有的是道格的公钥,但是还以为这是鲍勃的公钥。因此,道格就可以冒充鲍勃,用自己的私钥做成”数字签名”,写信给苏珊,让苏珊用假的鲍勃公钥进行解密。

11.
  

  后来,苏珊感觉不对劲,发现自己无法确定公钥是否真的属于鲍勃。她想到了一个办法,要求鲍勃去找”证书中心”(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成”数字证书”(Digital Certificate)。

12.
  

  鲍勃拿到数字证书以后,就可以放心了。以后再给苏珊写信,只要在签名的同时,再附上数字证书就行了。

13.
  

  苏珊收信后,用CA的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明”数字签名”是否真的是鲍勃签的。

14.
  

  下面,我们看一个应用”数字证书”的实例:https协议。这个协议主要用于网页加密。

15.
  

  首先,客户端向服务器发出加密请求。

16.
  

  服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端。

17.
  

  客户端(浏览器)的”证书管理器”,有”受信任的根证书颁发机构”列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。

18.
  

  如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出警告。

19.
  

  如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告。

20.
  

  如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。



总结:

1.  密钥对,在非对称加密技术中,有两种密钥,分为私钥和公钥,私钥是密钥对所有者持有,不可公布,公钥是密钥对持有者公布给他人的。
2.  公钥,公钥用来给数据加密,用公钥加密的数据只能使用私钥解密。
3.  私钥,如上,用来解密公钥加密的数据。
4.  摘要,对需要传输的文本,做一个HASH计算,一般采用SHA1,SHA2来获得。
5.  签名,使用私钥对需要传输的文本的摘要进行加密,得到的密文即被称为该次传输过程的签名。
6.  签名验证,数据接收端,拿到传输文本,但是需要确认该文本是否就是发送发出的内容,中途是否曾经被篡改。因此拿自己持有的公钥对签名进行解密(密钥对中的一种密钥加密的数据必定能使用另一种密钥解密。),得到了文本的摘要,然后使用与发送方同样的HASH算法计算摘要值,再与解密得到的摘要做对比,发现二者完全一致,则说明文本没有被篡改过。
  上面实际上介绍了加密解密和数字签名两个概念和实现过程,二者的过程正好是相反的。
  在签名的过程中,有一点很关键,收到数据的一方,需要自己保管好公钥,但是要知道每一个发送方都有一个公钥,那么接收数据的人需要保存非常多的公钥,这根本就管理不过来。并且本地保存的公钥有可能被篡改替换,无从发现。怎么解决这一问题了?由一个统一的证书管理机构来管理所有需要发送数据方的公钥,对公钥进行认证和加密。这个机构也就是我们常说的CA。认证加密后的公钥,即是证书,又称为CA证书,证书中包含了很多信息,最重要的是申请者的公钥。
  CA机构在给公钥加密时,用的是一个统一的密钥对,在加密公钥时,用的是其中的私钥。这样,申请者拿到证书后,在发送数据时,用自己的私钥生成签名,将签名、证书和发送内容一起发给对方,对方拿到了证书后,需要对证书解密以获取到证书中的公钥,解密需要用到CA机构的”统一密钥对“中的公钥,这个公钥也就是我们常说的CA根证书,通常需要我们到证书颁发机构去下载并安装到相应的收取数据的客户端,如浏览器上面。这个公钥只需要安装一次。有了这个公钥之后,就可以解密证书,拿到发送方的公钥,然后解密发送方发过来的签名,获取摘要,重新计算摘要,作对比,以验证数据内容的完整性。
  这里纯粹的文字,未免枯燥,可以结合前面提到的文章链接中的图片一起理解,这些文字对图片的理解应该有一些帮助。HTTPS是综合用了加密解密和数字签名的实例,理解了上述概念和过程,结合密钥对交换的过程就不难理解HTTPS。

证书与签名(一):数字签名是什么相关推荐

  1. java apk签名证书_Android签名证书的生成

    本节只针对如何从零开始实现简单的打包签名 概要 debug.keystore:使用Android Studio直接编译运行时默认使用的签名证书,存放路径C:\Users.android app-deb ...

  2. https证书自签名

    在网络里有很多病毒是人们不能了解的,所以在自己的网站里安装安全证书是很重要的,现在小编就对于https证书自签名和https双向认证来给大家介绍一下他们的知识.我们知道了这些知识以后我们在自己的网站里 ...

  3. 数字证书、签名到底是什么?这篇文章讲得太好了

    前段时间整理了关于数字证书和数字签名的一些内容,今天整理一下发出来. 我们都知道 HTTP 协议都是明文传输内容,为了保证数据传输的安全,HTTPS 协议就应运而生了,但它其实并不是一个全新的协议,而 ...

  4. 漫谈iOS程序的证书和签名机制 1

    原文:漫谈iOS程序的证书和签名机制 接触iOS开发半年,曾经也被这个主题坑的摸不着头脑,也在淘宝上买过企业证书签名这些服务,有大神都做了一个全自动的发布打包(不过此大神现在不卖企业证书了),甚是羡慕 ...

  5. 【转】漫谈iOS程序的证书和签名机制

    转自:漫谈iOS程序的证书和签名机制 接触iOS开发半年,曾经也被这个主题坑的摸不着头脑,也在淘宝上买过企业证书签名这些服务,有大神都做了一个全自动的发布打包(不过此大神现在不卖企业证书了),甚是羡慕 ...

  6. 沃通“SSL证书+代码签名证书”,防范高仿“钓鱼网站+钓鱼软件”攻击

    近日,360发布威胁预警,因监测发现多起利用钓鱼网站对特定用户进行攻击的安全事件,呼吁警惕"高仿"软件安装程序暗藏钓鱼木马."钓鱼网站+钓鱼软件"是非常典型的钓 ...

  7. WSE3.0构建Web服务安全(3):WSE3.0策略配置、证书、签名、与实例开发

    继WSE3.0构建Web服务安全(1):WSE3.0安全机制与实例开发和WSE3.0构建Web服务安全(2):非对称加密.公钥.密钥.证书.签名的区别和联系以及X.509 证书的获得和管理之后,今天我 ...

  8. 【SSL】使用Keytool工具生成证书及签名完整步骤

    前言 jdk 1.8 OS:redhat 7.0 linux 命令的换行符为 \. window 命令的换行符为 ^.本文中的命令在 redhat 上进行的测试.如果使用windows时,将下面的命令 ...

  9. iOS 证书与签名 解惑详解

    iOS 证书与签名 解惑详解 分类: iPhone2012-06-06 19:57 9426人阅读 评论(1) 收藏 举报 iosxcodecryptographyappleiphone测试 目录(? ...

  10. net安装 0x80096004 无法验证证书的签名_如何购买iOS签名证书

    ios签名证书购买只能购买企业开发者帐号,只有企业开发者才能提供签名服务. 签名机制的意义 安全.苹果为了对App的环境有绝对的控制权,只有被苹果认可的应用才可以安装到手机上.可以避免应用被篡改,以及 ...

最新文章

  1. python selenium 浏览器设置_python+selenium webdriver.firefox()方式配置浏览器设置
  2. Zabbix监控实现跨区域跨网络监控数据
  3. 报错,贴图整理(1)
  4. 3-1 Point类的构造函数_JAVA
  5. JavaScript解析顺序和变量作用域
  6. 读《JavaScript dom编程艺术(第2版)》笔记 1-2
  7. 优集品 php,从细节处着眼 优集品打造成人世界的儿童节
  8. Buildroot stress-ng Linux系统压力测试
  9. html怎么修改锚点的属性,在HTML中设置自定义锚点
  10. pkuseg:一个多领域中文分词工具包
  11. hdu 1257最少拦截系统(贪心)
  12. 如何在Telegram机器人中设置推送通知
  13. 懒人看执行计划神器 for Oracle
  14. android 前后同时预览_用上这些官方动态壁纸,让你的 Android 主屏简洁又优雅
  15. java的IO操作之--RandomAccessFile
  16. 倍福PLC TwinCAT 3 基础——编程基础
  17. 国内顶尖团队的开源地址
  18. t分布 u分布 卡方分布_几种分布概述(正态分布/卡方分布/F分布/T分布)
  19. Paragon NTFS 15Mac上NTFS分区的必备工具
  20. 洛谷 P5560 【[Celeste-B]Golden Feather】

热门文章

  1. Fatal error in launcher:解决
  2. [推荐系统]互联网推荐系统比较研究
  3. 【典型液压系统】组合机床动力滑台液压系统
  4. java不小于等于符号怎么打_java 大于等于号怎么打 java编程里面 x大于
  5. 标准差SD、相对标准偏差RSD学习和python实现
  6. Linux系统编程学习笔记
  7. Anaconda 添加清华镜像源
  8. 后端返回文件流PDF文件前端如何实现下载/在线打开
  9. 猜拳游戏 java_用java实现一个猜拳小游戏
  10. Chrome浏览器必备插件推荐