理解https
https连接过程
我们先来个简明概要的:
超简版
- 客户端(浏览器) -> 服务器(网站): hello服务器 , 加密算法a,b,c,hash算法d,e,f,ssl版本x.x
- 服务器(网站) -> 客户端(浏览器):选择a加密算法 和e hahs算法,我的证书
- 客户端 (浏览器)-> 服务器(网站):hash值hash1,消息message1,加密了的随机数secret1
- 服务器(网站) ->客户端(浏览器):hash值 hash2 消息message2
- 后续开始加密通信
看完之后,是不是啥也没懂,O(∩_∩)O哈哈~,不要急,接着看下更详细的,记得要跟上面的对比下:
详细版
-
客户端向服务器say hello
客户端(浏览器) -> 服务器(网站):hello服务器,我支持a,b,c 加密算法和 d,e,f hash算法,支持ssl版本是 x.x。
-
服务器收到后,选择一组算法连带着证明自己的证书一并发送给客户端
服务器(网站) -> 客户端(浏览器):我选择 a 加密算法 和 e hash算法 还有我的证书(表明公钥,有效期,拥有者,签名者 bla,bla)
-
客户端验证证书的合法性,生成一个随机数 123,将要发送的消息(hello)使用e hash算法,算好hash值 hash1 ,使用加密算法a ,用随机数加密要发送的消息(hello)得消息message1,用证书中的公钥加密随机数得 secret1。
客户端 (浏览器)-> 服务器(网站): hash值hash1,消息message1,加密了的随机数secret1
-
服务器用自己的私钥将secret1解密得随机数123,再使用随机数123通过加密算法a 解密消息message1得到hello,再通过算法e 算出消息hello的hash值 hash1,与传过来的hash值比对一致,正确。 一致之后,服务器自己选择一条消息(hello,too),使用hash算法e 算出hash值 hash2,使用随机数123加密消息(hello,too)得消息message2
服务器(网站) ->客户端(浏览器):hash值 hash2 消息message2
-
验证成功
后续开始加密通信,使用的是随机数123和加密算法 a 来加密要通信的信息,并用hash算法 e 来计算要通信的信息
好了,大致通信就是这个过程,当然上述还有很多地方需要解释,只是想给大家一个宏观上的流程,之后我会一一列举解释的。
- 保护世界的算法-RSA算法
- 对称加密和hash算法
- 伪随机数,猜不透的伪随机
- 信任是根本-证书,CA认证
保护世界的算法-RSA算法
这个标题起的太霸气了,但对RSA来说真的是当之无愧。因为https的安全就是基于RSA算法不会被攻破的基础上的,如果以后RSA算法可以被攻破,那计算机的世界就没有安全可言了。算法原理我自己还没弄的十分懂,所以我就不班门弄斧了,我能理解的就是,RSA算法是一种非对称算法,什么又是非对称算法呢?就是加密和解密不用同一个密钥,分公钥和私钥,你用公钥加密只能用私钥才能解密,反之同理私钥加密只能用公钥解密。如果想了解原理,附上,阮一峰的网络日志-《RSA算法原理(一)》,话说解释的已经很好了,但是我还是没太懂o(╯□╰)o,数学真是捉急啊。
对称加密和hash算法
对称加密,相比于非对称加密就是,加密解密都需要同一个密钥,目前主流的有:DES、3DES、AES 等等。 hash算法,其实这个也好解释,像我们编程语言中都会有hash算法,最常用的就是hashcode方法,其实hash的本质就是摘取原信息的一部分来运算得到一个可以代表原信息的token串,当然hash算法都存在所谓的碰撞,hash的作用就是可以快速的来验证信息的相等或不等(虽然有一定的碰撞几率,但是在很多情况下可以忽略),比较有名的hash算法:MD4、MD5、SHA-1等等。
https中使用加密算法加密通信过程中信息,使用的密钥是浏览器和服务器都拥有的随机数,建立一次连接用一个随机数,而hash的用处就是来保证信息在这个过程中完整性以及不被替换。
伪随机数,猜不透的伪随机
java中的random相信大家都用过,那就是一种伪随机数。浏览器生成的伪随机数一定要达到近似的随机,否则被猜到每次生成的数那这https连接也就没有意义了。 这里的随机数,在握手之后就用来浏览器和服务器的通信的密钥了,所以重要性可想而知。
信任是根本-证书,CA认证
最后,就是CA证书啦,这个我要多费点唾沫O(∩_∩)O~~。 我们先回顾上述的https建立连接的过程,其中服务器端将一个证书发送给客户端,证书中包含公钥和所属的单位以及有效期。只有客户端信任了这个证书,我们才能进行下面的步骤。 好关键的来了,首先这个证书是谁颁发的,我们怎么判断证书为合法的呢?
证书是CA颁发的,也就是认证机构,他们去负责验证网站的合法性以及给网站生成证书。CA也就是这个过程中的第三方,说到底我们还是需要无条件的去信任这个第三方,如果没有这个信任也就无从来判断信息的合法性了。