HTTP HyperText Transfer Protocol超文本传输写有。传输是有TCP做的。无状态、以请求应答方式运行。使用可扩展语义和自描述消息格式,基于网络超文本系统灵活互动。
报文格式
HTTP协议请求报文和响应报文的结构分为三大部分:
1. 起始行 start line
请求时起始行格式为GET /index.html HTTP1.1;
响应时起始行格式为HTTP/1.1 200 OK。
1.1 请求行报文格式
| METHOD | 空格 | URI | 空格 | VERSION | 换行 |
|---|
请求方式:get、head、put、post等,表示对资源的操作。
请求目标:通常是URI,请求方法要操作的资源。
版本号:报文使用的HTTP协议版本。
1.2 响应行报文
| VERSION | 空格 | STATUS CODE | 空格 | REASON | 换行 |
|---|
版本号:HTTP协议版本
状态码:代码形式的处理结果,3位数。
原因:数字状态码的补充。
2. 头部字段集合 header
请求头或响应头,例如Connection:keep-alive。以keyvalue形式,之间以:分割,最后由CRLF换行表示字段结束。
注意:
- 字段名不允许出现空格,不区分大小写,可以用
-不可以用_。:前必须紧跟字段名,后可以有多个空格。 - 字段顺序不影响语义
- 除了一些特例,字段不允许重复,特例例如:Set-Cookie。
常用头字段有:
-
请求字段
Host、Refer
-
响应字段
Server
-
通用字段
Content-type、Connection
3. 空行
4. 消息正文 entity
加密HTTP=HTTPS
HTTP是明文传输,在任意节点都会被截获篡改。因此为了安全性考虑,在原有的HTTP不改变的前提下,在传输层和HTTP之前创建SSL/TLS层(安全层)进行加密。
SSL/TLS
SSL Secure Sockets Layer安全套接层94年发明,99年改名为TLS Transport Layer Security传输层安全。TLS中使用混合加密方式,把非对称加密和对称加密结合起来。首先服务端事先准备好公钥和私钥。在客户端和服务端建立三次握手之后,进行密钥传输。 公钥数字证书组成:CA信息、公钥用户信息、公钥、权威结构签名、有效期。
除了HTTPS外,TLS可以被应用于任何基于TCP/IP协议的上层协议或应用程序,如SFTP协议,SMTP协议,数据库间通信加密等等。
TLS流程
TLS通讯过程可分为:验证身份、达成安全套件共识、传递密钥、加密通讯。
- TCP三次握手
- 【Client Hello】客户端会向服务端发送加密套件列表(告诉服务端支持的的散列算法、非对称加密算法、对称加密算法有哪些)、TLS版本和随机数(第一个随机数)。
- 【Server Hello】服务端会从客户端支持的加密套件里选择,并发送TLS版本以及随机数(第二个随机数)。
- 【Certificate】服务端会再发送一个响应告诉客户端公钥数字证书(不是普通公钥而是公钥数字证书。这样可以避免在TCP三次握手时被黑客拦截,使客户端一直在和虚假的服务器进行交互),出示服务器自己的证书。
- 【Server Key Exchange】服务端再发送公钥[如果服务端也想要客户端的证书就会在这里发出请求,比如登录网银]
- 【Server Hello Done】发送完了
- 【Client Key Exchange、Change Cipher Spec、Encrypted Handshake Message】客户端验证证书(对照自己的证书信任列表确认服务器是否可信),
-
Client Key Exchange
生成预主密钥/第三随机数,不会直接发送出去,会用刚才的公钥加密后发送出去
-
Change Cipher Spec
告诉服务端后面数据用协商好的算法密钥加密
-
Encrypted Handshake Message
标识客户端这边TLS协商没有问题了,加密开始
-
【Encrypted Handshake Message】服务端收到后用私钥解密,获取预主密钥。双方都能计算出会话密钥
客户端可以用第1随机数、第2随机数和预主密钥计算出会话密钥,服务端也可以用第1随机数、第2随机数、预主密钥计算出会话密钥。
-
【Application Data】使用对称加密算法进行加密双向传输
总结:TLS的关键步骤就是,服务器会生成公钥私钥,讲公钥传递给客户端,客户端会生成一个随机数,用随机数加密公钥后传递给服务端,服务端接收后用私钥进行解密就可以得到这个客户端生成的随机数,这个随机数现在客户端和服务端都有了,之后在传输数据的时候,就通过这个随机数进行对称加密所有内容。至始至终,这个随机数没有在网络中暴露传输过,因此在网络层面来说,可以预防中间人攻击。
预防中间人攻击
首先这个随机数作为密钥没有在网络中暴露过,因此可以预防攻击。同时预防黑客直接截获,装作请求服务器。因此需要数字证书。
摘要算法
md5、sha1、sha2、sha1 256都是摘要算法,我们可以将任意长度经过摘要算法获取固定长度。
数字证书/SSL证书
数字证书组成:CA信息、公钥用户信息、公钥、权威结构签名、有效期。 SSL证书,实际上就是保存在源服务器的数据文件。SSL证书需要向CA申请。整个证书表明域名属于谁、日期等信息,还包括了特定的公钥和私钥。
-
证书指纹
使用哈希加密,用于标识唯一一个证书。
-
数字签名
对称加密
编解码时,使用相同密钥/使用相同规则。可以使用异或其他来实现。另外常见有AES、RC4、ChaCha20等。
非对称加密
公钥加密,私钥解密。 如DH、DSA、RSA、ECC等。
参考: