1.什么是 HTTPS?
这个图片经常见吧~
没错,他就是HTTPS(Hypertext Transfer Protocol over Secure Socket Layer,即HTTP over SSL)。
简单来说HTTPS就是安全的HTTP。它将HTTP协议中的明文传输内容进行加密,确保信息传输的安全性。
HTTPS中的S是指位于HTTP协议与TCP/IP协议中间的SSL/TLS协议。
简单介绍下SSL/TLS协议
SSL协议:是一种记录协议,扩展性良好,可以很方便的添加子协议,而握手协议便是SSL协议的一个子协议。
TLS协议:是SSL协议的后续版本。
2.HTTPS和HTTP的区别
(1)http是超文本传输协议,信息是明文传输;https 则是具有安全性的ssl加密传输协议。
(2)http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
(3)http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
(4)https协议需要到CA申请证书。
3.什么是信息传输安全?
一个安全的网络通信环境要求有三个方面:
通信内容一定要保密
通信双方身份要确保真实
通信内容要完整
4.通信内容如何保密?
我们所用的互联网环境近似透明,而通信又需要经过很多中转才能到接收方手中。通信内容的保密性就显得非常重要了。
所以通信内容要保密就要用到加密算法了。举个简单例子来看什么是加密:定义一个函数f(x)=x+b,x是输入的明文,b是密钥;解密函数就是加密函数的反函数g(x)=x-b。因为b的值是未知的,所以第三方即便看见了密文也不知道文件真实内容,这样就实现了加密。这种加解密都用同一个密钥,叫对称加密。
既然有对称加密算法就会有非对称加密算法,非对称加密算法需要两个密钥来加密和解密---公开密钥(public key,公钥)、私有密钥(private key,私钥)。公钥是所有人都能获取到的钥匙,私钥则是服务器私自保存的钥匙。非对称加密算法中公钥加密的内容只能用私钥解密,私钥加密的算法只能用公钥解密。
https的加密就是通信双方利用非对称加密算法加密出一个对称密钥给对方,让其用自己的私钥读取对称密钥,然后通信双方就用这个对称密钥来做对称加密。
5.如何确保通信双方身份的真实性
直白的说,A与B通信中,A怎么确认B的身份不是由C伪造的。只需要校验由CA签发的数字证书就可确定B的身份。再介绍两个名词
数字证书:是互联网通信中标识双方身份信息的数字文件,由CA签发。
CA:(certification authority)是数字证书的签发机构。作为权威机构,其审核申请者身份后签发数字证书,这样我们只需要校验数字证书即可确定对方的真实身份。
6.通信内容的完整性
这一点主要是为了防止通信内容被第三方任意篡改,最常见的一个例子就是访问某些网站时经常跳出来的广告。
确保通信内容的完整性比较简单:先用哈希算法提取内容摘要,然后对摘要进行加密生成数字签名,验证数字签名就可以判断出通信内容的完整性了。
7.HTTPS流程图
8.HTTPS通信大体步骤:
(1)客户端发送Client Hello报文开始SSL通信,报文中包含SSL版本、可用算法列表、密钥长度等。
(2)服务器支持SSL通信时,会以Server Hello报文作为应答,报文中同样包括SSL版本以及加密算法配置,也就是协商加解密算法。
(3)然后服务器会发送Certificate报文,也就是将证书发送给客户端。
(4)客户端发送Client Key Exchange报文,使用3中的证书公钥加密Pre-master secret随机密码串,后续就以这个密码来做对称加密进行通信。
(5)服务器使用私钥解密成功后返回一个响应提示SSL通信环境已经搭建好了。
(6)然后就是常规的http c/s通信。
9.HTTPS通信的劣势
(1)对数据进行加解密决定了它比http慢
https需要进行非对称的加解密,且需要三次握手。首次连接比较慢点,当然现在也有很多的优化。
(2)出于安全考虑,浏览器不会在本地保存HTTPS缓存。实际上,只要在HTTP头中使用特定命令,HTTPS是可以缓存的。Firefox默认只在内存中缓存HTTPS。但是,只要头命令中有Cache-Control: Public,缓存就会被写到硬盘上。 IE只要http头允许就可以缓存https内容,缓存策略与是否使用HTTPS协议无关。
总的来说HTTPS通信中最重要的环节就是加密过程。
理解的不太透彻,不足之处欢迎补充。部分图片和内容来自于网络,侵删。