快速理解https实现的原理
一、为什么要用https?
http是在网络协议的应用层,用户通过http协议访问网站时,浏览器和服务器之间是明文传输,这就意味着用户填写的密码、帐号、交易记录等机密信息都是明文,随时可能被泄露、窃取、篡改,被黑客加以利用。
二、https是什么?
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
SSL(Security Socket Layer)全称是加密套接字协议层,它位于HTTP协议层和TCP协议层之间,用于建立用户与服务器之间的加密通信,确保所传递信息的安全性,同时SSL安全机制是依靠数字证书来实现的。
SSL基于公用密钥和私人密钥,用户使用公用密钥来加密数据,但解密数据必须使用相应的私人密钥。使用SSL安全机制的通信过程如下:用户与服务器建立连接后,服务器会把数字证书与公用密钥发送给用户,用户端生成会话密钥,并用公共密钥对会话密钥进行加密,然后传递给服务器,服务器端用私人密钥进行解密,这样,用户端和服务器端就建立了一条安全通道,只有SSL允许的用户才能与服务器进行通信。
三、看实例
客服端Client向服务端server post一个hello字符串:
解决这个问题,就得了解https的交互过程:
这样如果遇到中间人攻击(客户端的请求被中间人劫持),就会伪装成“假冒客服端”和服务器通信,也可以伪装成“假冒服务器端”和客服端通信,导致传输过程中内容泄密,中间人劫持的过程图(盗的图):
为了解决此问题,引入了数字证书的概念。
四、数字证书
服务器首先生成公私钥,将公钥提供给相关机构(CA),CA将公钥放入数字证书并将数字证书颁布给服务器,此时服务器就不是简单的把公钥给客户端,而是给客户端一个数字证书,数字证书中加入了一些数字签名的机制,保证了数字证书一定是服务器给客户端的。
中间人发送的伪造证书,不能够获得CA的认证,此时,客户端和服务器就知道通信被劫持了。加入了CA数字签名认证的SSL会话过程如下所示:
五、数字证书的作用
1、身份授权:确保浏览器访问的网站是经过CA验证的可信任的网站。
2、分发公钥:每个数字证书都包含了注册者生成的公钥(验证确保是合法的,非伪造的公钥),在SSL握手时会通过certificate消息传输给客户端。
3、验证证书合法性:客户端接收到数字证书后,会对证书合法性进行验证,只有验证通过后的证书,才能够进行后续通信过程。
六、数字证书的效验
申请者拿到CA的证书并部署在网站服务器端,那浏览器发起握手并接收到证书后,如何确认这个证书就是CA签发的呢?怎样避免第三方伪造这个证书?答案就是数字签名(digital signature)。数字签名是证书的防伪标签,目前使用最广泛的SHA-RSA(SHA用于哈希算法,RSA用于非对称加密算法)。数字签名的制作和验证过程如下:
1、数字签名的签发:首先是使用哈希函数对待签名内容进行安全哈希,生成消息摘要,然后使用CA自己的私钥对消息摘要进行加密。
2、数字签名的校验:使用CA的公钥解密签名,然后使用相同的签名函数对签名证书内容进行签名,并和服务端数字签名里的签名内容进行比较,如果相同就认为校验成功。
以上只是个人快速理解https实现原理的日记,欢迎讨论,不喜勿喷哦!
参考文献:
http://www.admin5.com/article/20150505/597061.shtml