HTTPS和SSL

参考文章:SSL及其加密通信过程_Jxhacker的博客-CSDN博客_ssl加密过程SSL协议原理详解_曹世宏的博客-CSDN博客_ssl协议

HTTPS

HTTP(Hyper TEXT Transfer Protocol超文本传输协议)是目前互联网上应用最为广泛的一种网络协议,用于在Web浏览器和网站服务器之间传递信息,但是HTTP协议以明文的方式发送内容,不提供任何数据加密,攻击者能够很轻易通过抓包的方式截取传输内容并读懂其中的信息,所以HTTP不适合传输一些比较私密的信息,为了解决HTTP这一缺陷,HTTPS(Hyper TEXT Transfer Protocol over Secure Socket Layer)协议出现。HTTPS是在HTTP的基础上加入SSL协议。传输以密文传输,保证数据传输的安全以及确认网站的真实性(数字证书)。

SSL

SSL英文全称Secure Socket Layer,安全套接层,是一种为网络通信提供安全以及数据完整性的安全协议,它在传输层对网络进行加密。它主要是分为两层:

  • SSL记录协议:为高层协议提供安全封装、压缩、加密等基本功能
  • SSL握手协议:用于在数据传输开始前进行通信双方的身份验证、加密算法的协商、交换密钥
    OpenSSL是SSL的开源实现,它是作为密码学的安全开发包,提供相当强大全面的功能,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。它一共提供了8中对称加密算法和4中非对称加密算法。

SSL加密过程

  1. 第一步:客户端A给出客户端版本+一个随机数+自己支持的加密方式
  2. 第二步:服务器B返回从客户端支持的加密方式中选择一种+一个随机数+安全证书
  3. 第三步:客户端A验证证书的有效性(以下是验证证书的步骤),然后再生成一个随机数,并使用证书中的公钥加密,发送给服务器B
    • 客户端通过浏览器内置的CA根证书,获取对应CA机构的公钥
    • 服务器B返回自己的安全证书,客户端使用CA公钥解密被CA私钥加密的信息得到一个hash值,再使用证书中的hash算法生成hash值,比较两个hash值
  4. 第四步:服务器B使用私钥解密这个随机数
  5. 第五步:通过第二步确认的加密方式和第一、二、三步生成的3个随机数生成一个对话秘钥,用于通信。

小结:HTTPS在验证证书阶段使用的是非对称加密(更安全),在数据传输阶段使用对称加密(更高效)。