1 HTTPS
1.1 HTTPS简介
HTTPS (Secure Hypertext Transfer Protocol)安全超文本传输协议,是一个安全通信通道,它基于HTTP开发用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版,是使用TLS/SSL加密的HTTP协议。
SSL (Secure Sockets Layer)安全套接层。是由Netscape公司于1990年开发,用于保障Word Wide Web(WWW)通讯的安全。主要任务是提供私密性,信息完整性和身份认证。1994年改版为SSLv2,1995年改版为SSLv3。
TLS(Transport Layer Security)安全传输层协议。用于在两个通信应用程序之间提供保密性和数据完整性。该标准协议是由IETF于1999年颁布,整体来说TLS非常类似SSLv3,只是对SSLv3做了些增加和修改。
TLS/SSL全称安全传输层协议Transport Layer Security, 是介于TCP和HTTP之间的一层安全协议,不影响原有的TCP协议和HTTP协议,所以使用HTTPS基本上不需要对HTTP页面进行太多的改造。
1.2 HTTP和HTTPS区别
1、https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,采用明文传输信息,存在信息窃听、信息篡改和信息劫持的风险。https则是具有安全性的ssl/tls加密传输协议。而协议TLS/SSL具有身份验证、信息加密和完整性校验的功能,可以避免此类问题发生。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443;使用的URL也不一样,前者为http//:URL,后者为https//:URL。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
1.3 TLS/SSL协议工作原理
1.3.1 TLS/SSL协议结构
SSL是一个不依赖于平台和运用程序的协议,位于TCP/IP协议与各种应用层协议之间,为数据通信提高安全支持。SSL协议结构如下图:
图:SSL协议结构图
SSL的体系结构中包含两个协议子层,其中底层是SSL记录协议层(SSL Record Protocol Layer);高层是SSL握手协议层(SSL HandShake Protocol Layer)。
SSL协议主要分为两层:
SSL记录协议层的作用是为高层协议提供基本的安全服务。SSL纪录协议针对HTTP协议进行了特别的设计,使得超文本的传输协议HTTP能够在SSL运行。纪录封装各种高层协议,具体实施压缩解压缩、加密解密、计算和校验MAC等与安全有关的操作。
SSL握手协议层包括SSL握手协议(SSL HandShake Protocol)、SSL密码参数修改协议(SSL Change Cipher Spec Protocol)和SSL告警协议(SSL Alert Protocol)。握手层的这些协议用于SSL管理信息的交换,允许应用协议传送数据之间相互验证,协商加密算法和生成密钥等。
SSL握手协议的作用是协调客户和服务器的状态,使双方能够达到状态的同步。
其中最重要的是记录协议和握手协议:
SSL记录协议:它建立在可靠的传输(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能。
SSL握手协议:它建立在SSL记录协议之上,用于在实际的数据传输开始之前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
注:本文主要介绍SSL握手协议,省略SSL记录协议
1.3.2 SSL/TLS握手协议建立连接过程
SSL 握手协议是SSL 协议中最重要同时也是最复杂的协议。
SSL 握手协议主要负责如下工作:
1、算法协商
2、身份验证
3、确定密钥
SSL握手过程分为四种:
1、Full Handshake : 全流程握手,C/S双方从无到有建立SSL连接;
2、Resum session Handshake : C/S双方曾经建立过连接,但中途断了,SSL会话信息还有保留,只需要执行部分握手流程就可建立SSL连接;
3、Server Re-negotiation Handshake : 已经建立了SSL连接,但server端为了某些原因(比如安全性)要求重新对密钥进行协商,也只需要执行部分握手流程;
4、Client Re-negotiation Handshake : 已经建立SSL连接,但client端为了某些原因要求重新协商,只需执行部分握手流程。
下文将介绍全流程握手的流程:
图:SSL/TLS握手协议建立连接过程图