0

SSL术语与基本原理

 2 years ago
source link: https://blog.yuantops.com/tech/ssl-terminologies-and-concepts/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

非对称加密的又一大应用是SSL。对于SSL的介绍,阮一峰有一篇深入浅出的博客,推荐阅读:数字签名是什么?。这篇文章也非常不错:SSL/TLS Strong Ebcryption: An introduction

SSL协议对互联网的安全十分重要。要理解SSL协议,必须先理解几个基本概念:信息摘要(message digest)数字签名(digital signature)数字证书(digital certificate)。阮一峰的博客里写得十分清楚了,看完后做一点自己的笔记。

SSL术语

  • 公钥(public key): 非对称加密密钥对中可以分发给其它人的一方。

  • 私钥(private key): 非对称加密密钥对中自己保存的一方。

  • 信息摘要(message digest): 对一段很长的数据消息,计算它的Hash函数值,得到的一串*较短*且*定长*的短数值。Hash函数可以是MD5或者SHA 1。Hash函数过程是单向不可逆的,不可能通过message digest 反推出原数据信息。同时,message digest也是独一无二的。可以理解为某一段数据内容独一无二的特征值。

  • 数字签名(digital signature): 使用用户私钥对信息摘要(message digest)进行加密,生成的信息。数字签名只能用用户的公钥解开。反过来,如果用户Alice的公钥成功解密了数字签名,那么一定能确定这个签名的签发者是用户Alice(因为只可能是Alice的私钥签发了它)。

  • 数字证书(digital certificate): 由某个被信任的机构(如Certificate Authority,CA)签发、认证用户身份的数字文件。(数字证书的内容复杂,将在另外一篇博客中专门介绍)。

SSL基本原理

这里介绍的是SSL的设计思想和大致原理,不是实现细节。转述自从阮一峰的博客。

假设用户Alice有属于自己的公钥/私钥对。她准备和好朋友Bob,Susan等通信。

  • Alice把自己的公钥送给朋友们:Bob,Susan每人一把。
  • Bob如果要给Alice写一封保密的信,那么他写完后用Alice的公钥加密,就可以达到保密的效果。
  • Alice收到信后,用自己私钥解密,就看到了信件内容。这里要强调的是,只要Alice的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。

试思考:如果Alice事先没有把自己公钥送给自己的朋友们,她自己手中也没有朋友们的公钥,那他们之间通信如何保证不被篡改?

  • 假设Alice要给Bob写信。她写好信(message)后,先使用Hash函数生成信息摘要(message digest)。然后,她使用私钥,对这个摘要加密,生成数字签名(digital signature)。最后,她把自己的信件内容、数字签名,还有自己的公钥一起发送给Bob。

  • Bob收到了信件。他取出Alice的公钥、数字签名,用公钥解密数字签名,得到信息摘要;他再读出信件内容,用Hash函数自己计算内容的信息摘要。如果取出来的摘要和算出来的摘要吻合,那么这封信就未被修改过。

  • 可是,万一黑客John截获了Alice发给Bob的信件,然后自己编造了一些内容,生成摘要、用自己密钥加密生成数字签名,再连同自己的公钥一起发给Bob,他就可以冒充Alice了。Bob如何确定取出的公钥就是Alice的,而不是别人(例如,黑客John)的?

  • Bob无法确定公钥是不是属于Alice,于是想到一个办法:他建议Alice去找权威机构(例如,certificate authority,简称CA)给她的公钥做认证,做个证书(certificate)。Alice领取了一份申请表格,填入自己的姓名、住址、联系方式、和自己的公钥,跑到CA去提交。CA接受申请,确认是Alice本人无误,就用自己的私钥处理Alice的表格内容,生成数字签名并附在申请表格后面,这就成了“数字证书”(digital ceritificate)。

  • 以后Alice给Bob写信,就会发送信件内容+数字签名+数字证书三部分。Bob收到来信,先检查数字证书的真伪。如果为真,那么从数字证书中取出Alice的公钥。这时可以确认得到的是Alice的真实公钥。

数字证书的现实应用:https中的SSL协议

  1. 首先,客户端向服务器发出加密请求。
  2. 服务器用自己的私钥加密网页,连同本身的数字证书,一起发送给客户端。
  3. 客户端打开自己的“证书管理器”,看证书是否由“受信任的根证书颁发机构”颁发。
  4. 如果证书合法,而且确实颁发给你所浏览的网址的,那么客户端就可以取出真实的公钥。否则客户端会提出警告。

思考:SSL协议的实现流程,与SSL certificate的实现细节

这篇文章为了解释SSL协议的原理,引入并介绍了“摘要”“数字签名”“数字证书”等概念。这篇文章主要介绍原理,而且用了比喻,可能在细节上有出入,这是需要注意的。在实际的互联网环境中,SSL协议的实现更为复杂精细。

但就谈到的点而言,可能还存在这样的疑问:
> 客户端(浏览器)如何确认一份数字证书的真伪?

这个问题值得思考。为了确认公钥是真实的,我们引入了“数字证书”为它担保——问题只不过换了一种问法,但信任锚点还是没能确认。在下一篇文章中,会讨论数字证书的细节,并介绍如何确认一份“数字证书”的真伪。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK