HTTP和HTTPS学习笔记

OSI从上往下的七层模型:应用层(HTTP)、表示层、会话层、传输层(TCP/UDP)、网络层(IP)、数据链路层、物理层。
HTTP协议是以明文方式发送内容,不提供任何加密方式,来进行信息传递。它是不安全的。使用端口为80。
HTTPS协议是由SSL/TLS+HTTP协议栈构建的可进行加密传输、身份认证的网络协议,比HTTP协议更具有安全性。使用端口为443。
HTTP + SSL(Secure socket layer)/TLS (transport layer security)= HTTPS。
SSL:位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。由SSL记录协议和SSL握手协议组成。
TLS:传输层安全协议,用于两个应用程序之间提供保密性和数据完整性。由TLS记录协议和TLS握手协议组成。
常用的对称加密算法:AES、DES、3DES。
常用的非对称加密算法:RSA、DSA。

SSL/TLS运行过程的握手协议

客户端发出请求(ClientHello)
  • 发送支持的TLS版本。
  • 发送支持的加密算法,比如RAS公钥加密。
  • 发送支持的压缩方法。
  • 发送客户端生成的一个随机数A,且客户端存留。
服务器回应(ServerHello)
  • 将收到的TLS版本,和服务器支持的TLS版本比较,确认使用一个合适的加密通信协议版本返回给客户端,没有合适的则关闭加密通信。
  • 确认使用的加密算法,例如RAS公钥加密。
  • 服务器证书(内带服务器公钥K),为了向客户端证明这条回应是本服务器的。
  • 发送一个生成的随机数B,且服务器端存留。
客户端回应
  • 验证服务器的证书,如果不是目标服务器则会显示一个警告,由客户端选择是否还要继续通信。
  • 客户端生成一个随机数(pre-master key)C,用服务器发来的公钥加密,并发送。
  • 编码改变通知,表示之后的信息会按照双方约定好的加密方法和密钥发送。
  • 客户端握手结束通知,表示客户端的握手阶段已经结束(这一项同时也是前面所有发送内容的hash值,用来供服务器校验)。
  • 根据需求是否要发送客户端的证书。
服务器端最后回应
  • 根据需求是否要验证客户端的证书。如果需要,验证失败则关闭加密通信。
  • 编码改变通知,表示之后的信息会按照双方约定好的加密方法和密钥发送。
  • 发送服务器端握手结束通知,表示服务器端的握手阶段已经结束(这一项同时也是前面所有发送内容的hash值,用来供客户端校验)。

总结握手协议:

  • 直至最后,客户端和服务器各自分别拥有了3个随机数A、B、C,C是客户端用服务器证书中的公钥进行了加密,服务器用私钥进行解密获得,再通过协商好的方法将这三个随机数生成一个会话密钥(session key),来进行之后通信上的对称加密。握手协议里提到的是否会有客户端证书的相关步骤,取决于是否有双向认证的需求。
  • 主要是一个客户端和服务器协商并安全地生成一个之后进行通信要用的随机性很高的对称密钥、通信协议版本和压缩方法的加密通信过程。

文中为个人理解,如有不合之处,欢迎指出。

参考

数字证书浅析http://www.cnblogs.com/hyddd/archive/2009/01/07/1371292.html

你可能感兴趣的:(HTTP和HTTPS学习笔记)