HTTPS到底是如何保证通信安全的

一直对https有个模糊的概念,只是知道https安全,信息是加密的,但是对于细节一直是不明白,特别是为什么要买个证书。今天看图灵图书的《图解HTTP》一书,看到https这一章节,终于知道个大概是咋回事了。

第一:https的概念

https就是把http协议包裹在SSL协议里,再加上一些证书的东西,就称为https。https就是躲在SSL协议之后的http协议。
http是把http请求或者响应传给传输层,传输层把请求或者响应包装之后发给http通信的另外一端。
https是SSL协议先把通信的两端加密方式协商好,http再把请求和响应传给SSL协议层,SSL层把请求和响应加密之后,再传给传输层,传给通信的另外一端,另外一端也是先由SSL层解密,再交给http层。

第二:SSL协议

SSL协议是介于传输层(tcp协议)和应用层(http协议)之间的一个协议。
SSL协议之前是网景公司提出的,后来由另外一个标准制定组织接收了,又提出了基于SSL协议发展的TLS协议.
SSL协议就是用于通信两端建立安全连接,完成加密传输,保证传输的完整性。

第三:https通信过程。

1、SSL协议层先握手建立连接,协商使用的加密算法。
2、服务器先把公钥发给客户端。
3、这样客户端可以使用公钥加密发给服务器,服务器用私钥解密,服务器可以通过私钥加密发给客户端,客户端用公钥加密。
4、后面就开始正式的http通信。
(备注;ssl协议不仅仅使用非对称加密,还会混合使用对称加密,因为非对称加密很耗CPU,性能不好,ssl在建立连接之后,后面会协商一个共享秘钥进行内容通信。)

通过加密传输的数据就是安全的。

第四:证书

上面的通信过程建立链接之后是安全的,但是有一个漏洞。
第一:就是黑客可以冒充服务器发送假的公钥,和客户端通信
第二:就是黑客可以冒充假的客户端和服务器通信

先说第一个问题:
客户端如何证实是真的服务器发过来的真的公钥呢?这就出现了服务端的证书。
方法是通过第三方权威机构颁发的证书,所谓证书,就是第三方权威机构用自己的私钥,对某服务器的公钥进行的数字签名。
服务器在把公钥发给客户端的时候,也要发送自己的证书(也就是第三方机构的数字签名)。
客户端用第三方机构的公钥对数字签名进行验证,验证通过,就认为这个公钥是合法的。因为第三方权威机构的私钥是很安全的(我们暂且这么认为),所以伪造不了。
这就解决了第一个问题。

第三方权威机构必须是有信用的公司,例如VeriSign公司是专门的证书颁发机构,当然如果这个公司靠不住,以上都不成立了。
有人会问,这个第三方机构的公钥也是假的呢? 这个第三方机构的公钥肯定要以一种更安全的方式传给客户端。

那就是各大浏览器在发布的时候,已经把一些权威机构的公钥预置进去了,除非你下载了盗版的浏览器。

再说第二个问题,服务端如何识别客户端是真的客户端呢?

最安全的方式就是客户端也使用证书,每个专门的用户一个证书,但是这个代价比较高,因为申请证书要收费的。
目前大部分互联网企业做法是只对服务器端进行证书认证,只要确保客户端能识别真的服务器就可以了。
至于对客户端的真伪,一般的做法是通过用户名密码,只要用户名密码对了,我就认为和服务器连得客户端就是那个我认为的客户端。
再安全一点的做法就是验证手机号,弄个不断变化的密令,宝令,usb密码狗之类的。
所以用户千万不能把你的密码告诉别人。

以上看来,https通信还是比较安全的,怪不得那么多互联网公司都在转向全网https,这是一个趋势。
对于https还有很多细节,我这里只是大概描述个https的概念,更专业的东西就让专业搞密码学的人去搞吧。

  1. 小众博客说道:

    主题不错。

留言

提示:你的email不会被公布,欢迎留言^_^

*

验证码 *