SSL与数字证书byzhlmmc前言SSL是让人头大的东西,看起来很复杂,我学过信息安全课,但是对SSL仍然是模糊一片。对于数字证书也是一知半解,从来没有去认真研究过。现在帮教授做一项目,前不久在入手这个项目的时候谈到SSL通信,我很尴尬啊~计算机专业本科毕业,拿着双学位,可惜搞不明白SSL是怎么工作的,也说不出数字证书具体的原理,只能说个大概,“反正就是对称加密和非对称加密”,真是书到用时方很少!忘了不是借口,这种东西应该是每个计算机专业的人必备的~It’snotrocketscience!目录第一章为什么网络是不安全的?...........................................................................................3第二章信息安全的基本概念...................................................................................................4第一节安全的定义............................................................................................................................4第二节认证与授权............................................................................................................................4第三章加密与算法...................................................................................................................6第一节散列(HASH).......................................................................................................................6第二节对称加密(SYMMETRICCRYPTOGRAPHY).......................................................................6第三节非对称加密(ASYMMETRICCRYPTOGRAPHY)..............................................................7第四节数字签名(DIGITALSIGNATURE)......................................................................................7第四章数字证书.......................................................................................................................9第一节数字证书的构成.................................................................................................................9第二节如何验证数字证书?..........................................................................................................12第三节数字证书的级联(CERTIFICATECHAIN)........................................................................14第五章SSL的基本原理.........................................................................................................21结束语............................................................................................................................................24第一章为什么网络是不安全的?计算机世界是基于网络的,根据目前网络的结构和实现,数据包在世界各地的路由器之间游荡,任何人都可以获得你的发送的数据包,从而获得你发送的数据。局域网内就更方便了,只要你开个Sniffer在那里监听,别人QQ聊天的信息一览无余啊~为什呢?我来简单解释一下计算机网络是如何传输数据的。现实生活中,如果你请快递帮你寄东西,一般情况下,快递会把东西送到目的地,而不是其他地方。路由器就像是快递,在Internet上负责送数据。但和真实的快递不同的是,路由器会把你要发送的信息广播给离目的地更近的路由器,可能是一个路由器,也可能是多个路由器(别问我为啥,我不想深入了,有兴趣自己查资料)。这样你的信息就变成多份的了。复制虚拟的信息不值钱那~现实生活中的快递可不能复制你要寄的东西。一般情况下,只有一份数据会被目的计算机接收到,其他的拷贝在网络上游荡一段时间以后就被抛弃了。但是,这给黑客们有了很多可乘之机。他们在网络上监听很多垃圾信息,过滤掉没用的,留下他们感兴趣的,然后就可以偷窥别人隐私了。正是因为网络有这样的问题,人们就发明了很多加密通信的手段,来保证自己的通信的内容不会被泄露。SSL和数字证书就是用来干这个的。第二章信息安全的基本概念在解释SSL和数字证书之前,我觉得有必要解释一下几个有关信息安全的基本概念。第一节安全的定义如果说两个人之间的通信是安全的,那么如何定义这个安全呢?1.保密性(Confidentiality)保密性应该很容易理解,就是只有你自己和你允许的人能看到相关的信息。这和物理文件的保密性是一样的。2.完整性(Integrity)所谓完整性就是你的信息没有被破坏或者篡改过。举个例子比如网络聊天,保证对方收到的信息就是你发出的信息也是信息安全的一部分。3.可获得性(Availability)可获得性是指你自己在需要的时候能够访问到信息或者保证对方能够收到你的信息。通常,我们平时说的“安全”往往只包括第一点,保密性。其实后面两点也是很重要的,特别是在信息安全领域。如果没有完整性和可获得性,光保密又有什么用呢?回到我们的主题,SSL和数字证书主要关注的是前两点。至于可获得性就需要涉及到硬件,管理等等了。第二节认证与授权现在的问题是,我们如何保证上面所定义的“安全”?通常,有以下两个方法:1.认证(Authentication)认证是证明你就是那个你所声称的那个人。举个例子,你说你是张三,然后去机场登机,机场工作人员怎么知道你就是张三呢?你必须出示你的身份证或者护照,这样就可以证明你就是那个你所声称的张三。在信息安全领域也一样,比如你想去google查看zhlmmc的邮件,然后google会问你要zhlmmc的密码,因为只有zhlmmc知道zhlmmc帐户的密码,如果你能说出那个密码,那么你就是zhlmmc,google就会把zhlmmc的邮件返回给你。有些文章把这个过程称为Identification。2.授权(Authorization)授权是指一个系统里面有很多用户,有些用户能做某些事情,有些用户不能做某些事情。比如Linux,很多用户可以同时通过认证而登录到Linux主机,但是只有root才能修改或删除系统文件,普通用户只能修改自己的home。这里每一点都可能涉及很多不同的技术来保证过程的顺利进行。“授权”跟业务逻辑的牵扯比较大,SSL和数字证书更多的关注第一点。第三章加密与算法加密是保护信息安全的常用手段之一。对信息的加密是需要加密算法的,如果加密算法被破解了,那么一切免谈。不过,基本上,要破解一个加密算法是非常非常困难的。至少,目前流行的加密算法还是安全的,所以我们也就不必考虑这个问题了。第一节散列(Hash)经常用bt下载的人应该很熟悉这个。这就是MD5啊~虽然Hash不只是MD5,常见的还有SHA1。不过MD5最流行所以一般大家说的hash就是它了。值得一提的是,山东大学的王小云在2005年的时候发了一篇“HowtoBreakMD5andOtherHashFunctions”引起了信息安全界的轰动。虽然我没仔细研读过这篇paper,不过我相信按照paper里面的说法要破解MD5还是很费劲的,要不早就出乱子了。所以我们就不考虑这个问题了。那么究竟什么是MD5呢?我来简单解释一下。Hash就是一个工具,能把任意大小的文档变成一个固定大小(MD5是32个字符)的字符串。并且,这个过程是不可逆的,也就是说,没有任何办法从那个字符串得到原来那个文档。还有很重要的一点是,任意两个文档(哪怕极其相似)得到相同字符串的概率几乎等于0。现在你有一个10000字的文章,发给你的朋友,那你的朋友怎么判断他收到的文章一个标点符号都没有少呢?你在发送文章的同时把这个文章的Hash字符串也发过去,这样你的朋友收到文章以后,根据收到的文章重新计算一遍这个字符串,如果这个字符串和你发过去的一样,那就证明你朋友收到的文章是和你发送的一模一样。第二节对称加密(SymmetricCryptography)所谓加密就是把一段能看懂的东西通过某种变换变成看不懂的东西。当然这种变换是可逆的,否则加密有什么用啊!这里所说的“变换”就是加密算法。目前我们所说的加密算法基本上都是基于密钥的。加密算法不能单独工作,必须有密钥配合。就像现实生活中的锁,同一型号的锁的原理都一样,但是没把锁都有各自的钥匙,用来开锁和关锁。加密的算法是公开的,但密钥是保密的。自己“发明”加密算法是很愚蠢的,除非你是密码学专家。历史上有很多使用自己发明的加密算法的笑话,往往你发明的算法都是自以为是,其实很容易破解的拉。而目前流行的加密算法都是经过时间和众人检验的,一般情况下,只要密钥不泄露,那就是安全的。有一点要说明的是,虽然我们平时一般说“加密算法”,但往往这个加密算法都包含解密算法的。“对称加密”是指加密和解密的密钥是同一个。目前流行的对称加密算法有DES,AES,Blowfish等等。举个例子,你有一篇文章想要发给你朋友,但是你不想让别人看见这篇文章所以你选择AES加密。用的密钥是你和你朋友事先约定的,只有你们两个人知道。在发送之前,你用AES算法和约定好的密钥给文章加密,然后把加密过的文章发送给你的朋友。你朋友收到以后可以用AES算法和那个密钥解密而获得原始的那篇文章。对称加密算法的优点是速度快,缺点是密钥管理不方便,要求共享密钥。第三节非对称加密(AsymmetricCryptography)如果你理解了上面讲的对称加密,那么这里的非对称加密就很简单了。从字面上理解就可以猜到,加密和解密不是用的同一个密钥,其中一个称为公钥(publickey),另一个称为私钥(privatekey)。公钥就是公开的,大家都知道,而私钥只有你自己知道。这两个密钥在数学上是有联系的,用公钥加密的内容只能由相应的私钥来解密,反过来,用私钥加密的内容只能由相应的公钥来解密。另外很重要的一点是,不能从公钥推导出私钥,或者说很困难。常用的非对称加密算法有RSA,ECC等等。举个例子,你想要把一篇文章发送给你的朋友,但是不想让别人看到这篇文章。除了用上面讲的方法以外,你还可以用非