使TCP安全:SSL
SSL(Secure Socket Layer, 安全套接字层)通过采用机密性、数据完整性、服务器鉴别、客户端鉴别来强化TCP。
SSL版本3的一个稍加修改的版本被称为运输安全性(Transport Layer Security, TLS).
假设你在淘宝上购买一个东西,填写了一个表单。表示我需要买一件T恤,附上我的电话号码、收货地址、支付卡号等信息。
如果信息没有安全加密:
1、黑客可能截取我的订单并得到我的支付卡信息等(机密性)
2、黑客可能修改我的订单,变成买10件(数据完整性)
3、黑客可以伪装成淘宝网站,从而欺骗我在错误的网站下单(端点鉴别)

对称加密技术
加密和解密共用同一个密钥的方式称为对称加密技术。
如何安全地沟通双方公用的密钥?如果密钥被攻击者获得,就失去了意义。
非对称加密技术
非对称加密技术使用两把密钥:一把私钥、一把公钥
使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。
HTTPS采用混合加密机制
1、使用对称加密方式交换在稍后的非对称加密中要使用的公钥
2、确保交换的密钥是安全的前提下,使用非对称加密的方式进行通信
数字证书
对称加密存在的问题:
如何证明收到的公钥就是原本预想的那台服务器发行的公钥?万一公钥在传输过程中被攻击者替换了呢?
解决:
使用由数字证书认证机构(CA,Certificate Authority)和其相关机关颁发的公开密钥证书。
用于确认客户端的客户端证书
HTTPS中还可以使用客户端证书。以客户端证书进行客户端认证,证明服务器正在通信的对方始终是预料之内的客户端,其作用和服务器证书如出一辙。
客户端证书需要付费购买,要让知识层次不同的用户自行安装证书,充满挑战。
HTTPS的安全通信机制

步骤0:三次握手建立TCP连接
步骤1:客户端通过发送Client Hello报文开始SSL通信。报文中包含:a. 客户端支持的SSL版本和加密算法的列表;b. 一个客户的不重数(nonce)。
步骤2:服务器进行SSL通信时,会以Server Hello报文作为应答。和客户端一样,在报文中包含:a. SSL版本以及加密组件,服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的;b.一个服务器的不重数。
步骤3:之后服务器发送Certificate报文。报文中包含公开密钥证书。
步骤4:最后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束
步骤5:SSL第一次握手结束之后,客户端验证服务端发来的证书,提取服务器的公钥。客户端以Client Key Exchange报文作为回应。报文中包含加密中使用的一种被称为Pre-master secret的随机密码串。该报文已用Server的公钥进行加密。之后,客户和服务器端独立地从PMS和不重复数计算得到此会话的主密钥(Master Seceret, MS),然后该MS被切片以生成两个密码和两个MAC密钥。
步骤6:接着客户端继续发送Change Cipher Spec报文。该报文会提示服务器,此报文之后的通信会采用Master secret密钥加密。
步骤7:客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值(MAC)。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准。
步骤8:服务器同样发送Change Cipher Spec报文。
步骤9:服务器同样发送Finished报文。
步骤10:服务器和服务端的Finished报文交换完毕后,SSL连接就算建立完成。通信会受到SSL保护。从此处开始应用层协议的通信,可以发送HTTP请求了。
步骤11:应用层协议通信,发送和响应HTTP报文
步骤12:最后由客户端断开连接。断开连接时,发送close_notify报文。这步之后再发送TCP FIN报文来关闭与TCP的通信。
4个密钥
服务器和客户端都使用MS生成四个密钥:
1、Eb,用于从b发送到a的数据的会话加密密钥
2、Mb,用于从b发送到a的数据的会话MAC密钥
3、Ea,用于从a发送到b的数据的会话加密密钥
4、Ma,用于从a发送到b的数据的会话MAC密钥
握手篡改
MAC message authentication code,报文鉴别码,用于保证数据完整性
在客户端发送的Finished报文中包含连接至今全部报文的整体校验值(MAC),服务器能够比较这个MAC与它已经接收和发送的握手报文的MAC,如果有不一致,服务器能够终止连接。类似地,服务器发送一个它已经看到的握手报文的MAC,允许客户检查不一致性。
报文段重放攻击
考虑下面情况:
1、Client和Server在前一天已经建立过连接并且交换过报文了。
2、黑客嗅探到了他们之间的所有报文。
3、在第二天黑客冒充Client向Server发送前一天client发送的所有报文序列。
如果没有不重数,server就会将前一天发送过的每个报文响应给黑客。
但是现在协议中有不重数,Server将对每一个会话发送不同的不重数,使得这两天的加密密钥不同。得以防御“报文段重放攻击”。
中间人攻击
中间人攻击是攻击方同时与服务端和客户端建立起了连接,并让对方认为连接是安全的,但是实际上整个通信过程都被攻击者控制了。攻击者不仅能获得双方的通信信息,还能修改通信信息。
中间人攻击(Man-in-the-middle attack,MitM)会在消息发出方和接收方之间拦截双方通讯。举例来说,路由器就可以被破解用来进行中间人攻击。
HTTPS 就可以用来防御中间人攻击,但是并不是说使用了 HTTPS 就可以高枕无忧了,因为如果你没有完全关闭 HTTP 访问的话,攻击方可以通过某些方式将 HTTPS 降级为 HTTP 从而实现中间人攻击。
总结

使用到的密码技术:
1、不重数:保证Master Secret生成的随机性
2、报文鉴别码:MAC(message authentication code),用于保证数据完整性
3、数字签名(CA)
4、证书:解决公钥的真实归属问题,降低中间人攻击概率
5、对称加密
6、非对称加密
