美文网首页
快速理解https实现的原理

快速理解https实现的原理

作者: wadelin | 来源:发表于2017-03-12 13:35 被阅读0次

    快速理解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字符串:

    问题: 如何做到 client发送给server的 hello 字符串,即使被中间人拦截到了,也无法得知字符串的内容?

    解决这个问题,就得了解https的交互过程:

    https交互过程图

    这样如果遇到中间人攻击(客户端的请求被中间人劫持),就会伪装成“假冒客服端”和服务器通信,也可以伪装成“假冒服务器端”和客服端通信,导致传输过程中内容泄密,中间人劫持的过程图(盗的图):

    中间人攻击过程图

    为了解决此问题,引入了数字证书的概念。


    四、数字证书

    服务器首先生成公私钥,将公钥提供给相关机构(CA),CA将公钥放入数字证书并将数字证书颁布给服务器,此时服务器就不是简单的把公钥给客户端,而是给客户端一个数字证书,数字证书中加入了一些数字签名的机制,保证了数字证书一定是服务器给客户端的。

    中间人发送的伪造证书,不能够获得CA的认证,此时,客户端和服务器就知道通信被劫持了。加入了CA数字签名认证的SSL会话过程如下所示:

    CA认证保存数据安全性

    五、数字证书的作用

    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

    http://web.jobbole.com/88724/

    http://blog.csdn.net/alex8046/article/details/51909772

    http://wetest.qq.com/lab/view/110.html

    相关文章

      网友评论

          本文标题:快速理解https实现的原理

          本文链接:https://www.haomeiwen.com/subject/jgmtnttx.html