超文本传输安全协议(HyperText Transfer Protocol Secure,缩写:HTTPS)是一种通过计算机网络进行安全通信的传输协议。
HTTPS经由HTTP进行通信,利用SSL/TLS来加密数据包。其主要目的,是提供对网站服务器的身份认证,保护交换资料的隐私与完整性。
一般而言HTTPS需要基于DNS域名系统(Domain Name System),它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用UDP端口53;
当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
操作系统会首先检查自己本地的hosts文件是否有该网址映射关系,如果有就直接调用ip地址映射完成解析;
查找本地dns解析器缓存是否有该网址映射关系,如果有就直接返回完成域名解析;
查询tcp/ip参数中设置的首选dns服务器,此服务器收到查询时,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析;
如果该服务器缓存了此网址映射关系,则调用这个ip地址映射,完成域名解析;
根据本地dns服务器的设置进行查询,当未使用转发模式,本地dns就把请求发至13台根dns服务器,根dns服务器收到请求后会判断这个域名是谁来授权管理,并返回一个负责该顶级域名服务器的一个ip。当本地dns服务器收到这个地址后,就会找到该域名服务器,重复上面的动作进行查询直到找到该域名主机;
如果使用转发模式,此dns服务器就会把请求转发至上一级dns服务器,由上一级服务器进行解析,如此循环。
协议组成:
起始行(start line),描述请求或响应的基本信息(方法&空格&url&空格&版本号&回车换行);
头部字段(header),使用key-value形式更详细的说明报文;
消息正文(entity),实际传输的数据;
起始行和头部字段合并成为请求头或响应头,即Header;
消息正文即body,Header与body之间有一个空行(CRLF);
请求方法:
GET获取资源,请求访问已被uri识别的资源;
POST传输实体;
PUT传输文件;
HEAD获得响应首部,与GET相同,只是不返回报文主体;
DELETE删除文件;
OPTIONS询问支持的方法,用来查询针对uri指定资源支持的方法;TRACE追踪路径,服务端将之前的请求通信环返还给客户端;CONNECT要求使用隧道协议连接代理,实现用隧道协议进行TCP通信。
TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层(Transport layer)通信协议,当客户端和服务端彼此传输数据前,必须先在双方之间建立连接,之后才能传输数据;
TCP协议使用超时重传、数据确认等方式来确保数据包被正确的发送;
UDP(User Datagram Protocol)是一种无连接、不可靠、基于数据包的用户数据协议;
UDP传输数据包前不需要在客户端和服务端之间建立连接,只是把包发出去;
容易丢包,效率高;
TCP连接流程:
客户端发送syn包(syn=x)到服务端,并进入SYN_SENT状态,等待服务端确认;
服务端收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
客户端收到服务端的SYN+ACK包,向服务端发送确认包ACK(ack=y+1),客户端和服务端进入ESTABLISHED(TCP连接成功)状态;
TCP断开流程:
客户端向服务端发送的报文中FIN设置为1,请求与服务端断开连接;
服务端收到FIN报文,返回确认应答包(ACK);
服务端发送FIN报文段,请求关闭连接;
客户端想服务端发送ACK报文段,服务端收到后直接断开连接,客户端等待2ms后断开;
一般而言使用UDP时通过广播找到目标地址,然后点对点进行数据传输。
客户端发起一个HTTPS请求,请求服务器公钥,连接443端口,还包含此时客户端生成的随机数(Client Random);
服务端收到请求后生成一对公私钥和一个随机数(Server Random),把公钥以数字证书的形式加上刚才生成的随机数(Server Random)返回给客户端;证书中有一个公钥(CA)来加密信息,私钥(CA)由服务端持有;
客户端收到数字证书后,先验证证书的合法性;
验证通过后,客户端生成一个随机值(pre-master),并用服务器生成的公钥加密,发给服务端;
服务端收到随机值(pre-master)后,使用私钥进行解密,通过(Client Random、Server Random、pre-master)随机数合成会话密钥(对称加密);
双方使用该密钥对传输信息加密;
客户端和服务端相互发送摘要信息(Encrypted Handshake Message(Finishd)),使用会话密钥加密验证是否被篡改过。
证书锁死,证书过期强制更新;
开启校验域名、证书有效性、证书关键信息及证书链。
HTTP默认使用80端口,HTTPS默认使用443端口;
安全性;
HTTPS需要多次握手,导致加载时间是HTTP的2-100倍;
HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗;
SSL涉及安全算法会消耗CPU资源。