10 张图带你深度理解 HTTPS

198 阅读6分钟

e-commerce-3228418_640.jpg

在数字化时代,数据安全和隐私保护变得至关重要。HTTPS 作为保障网络通信安全的重要协议,其重要性日益凸显。本文将从基础概念出发,深入探讨 HTTPS 的工作原理关键技术、以及如何在实际应用中部署和维护 HTTPS,最后用图示解开 HTTPS 握手全过程

HTTPS 介绍

在 HTTP 协议中,数据以明文形式传输, 容易遭受窃听、篡改和冒充等安全威胁。HTTPS超文本传输安全协议)是 HTTP 协议的安全版本,它在 HTTP 下层加入了 SSL/TLS 协议,通过加密技术保护数据不被非法访问,确保了数据的 安全性和隐私性

SSL(Secure Sockets Layer)TLS(Transport Layer Security)是两个主要的加密协议,用于在互联网上提供安全通信。TLSSSL 的继承者,提供了更高级的安全特性。

HTTPS 的工作原理

HTTPS 在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手在握手过程中将确立双方加密传输数据的密码信息

image.png

以下是 SSL/TLS 的握手过程的主要步骤:

  1. 客户端发起连接:客户端通过 HTTPS URL 请求服务器的资源。
  2. 服务器响应证书:服务器响应其 SSL(CA) 证书,该证书包含了服务器的公钥。
  3. 证书验证:客户端验证证书的有效性(如证书颁发机构、证书有效期)。
  4. 密钥交换:客户端生成一个对称加密密钥,然后用公钥加密,发送给服务器,服务器用私钥解密获得密钥。
  5. 加密通信:客户端和服务器使用协商的密钥进行加密通信(对称加密)

涉及的加密算法

  • 对称加密:如 AES(高级加密标准),用于快速加密大量数据,加密解密速度快
  • 非对称加密:如 RSA(Rivest-Shamir-Adleman),用于密钥交换和数字签名。
  • Hash 摘要: 确保消息的完整性

HTTPS 的关键技术( 数字证书)

数字证书类型

数字证书是一个电子文档,用于证明公钥的合法性。它由可信的第三方机构(CA)签发,包含了证书持有者的公钥、身份信息和 CA 的数字签名。

证书类型适用网站类型公信等级认证强度安全性
DV(域名型)适用于个人网站、App 服务、展示型网站、企业测试或个人测试网站。一般CA 机构审核个人网站真实性、不验证企业真实性一般
OV(企业型)适用于政府组织、中小型企业教育机构等。CA 机构审核组织及企业真实性
EV(企业增强型)适用于大型企业金融机构电商等涉及交易支付和隐私数据的高私密网站。最高严格认证最高

证书格式

服务器类型证书格式
Nginxpem/key
Tomcatpfx
Apachecrt/key
IISpfx
JKSjks
其他pem/key

证书类型

  • .CRT 文件: 这样的证书文件可以是二进制格式,也可以是文本格式,一般均为文本格式,功能与 .DER.CER 证书文件相同。
  • .PEM 文件: 这样的证书文件一般是文本格式,可以存放证书或私钥,或者两者都包含。 .PEM 文件如果只包含私钥,一般用 .KEY 文件代替。
  • .PFX 文件: 这样的证书文件是二进制格式,同时包含证书和私钥,且一般有密码保护。

部署 HTTPS

获取 SSL 证书

部署 HTTPS 的第一步是获取一个 SSL 证书。可以选择付费证书免费的证书颁发机构,如 阿里云、腾讯云都能申请。

配置 Web 服务器

在 Nginx 服务器安装证书

cd /usr/local/nginx/conf  #进入Nginx默认配置文件目录。该目录为手动编译安装Nginx时的默认目录,如果您修改过默认安装目录或使用其他方式安装,请根据实际配置调整。
mkdir cert  #创建证书目录,命名为cert。

执行以下命令,打开配置文件。

vim /usr/local/nginx/conf/nginx.conf

server {
     #HTTPS的默认访问端口443。
     #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
     listen 443 ssl;

     #填写证书绑定的域名
     server_name <yourdomain>;

     #填写证书文件绝对路径
     ssl_certificate cert/<cert-file-name>.pem;
     #填写证书私钥文件绝对路径
     ssl_certificate_key cert/<cert-file-name>.key;

     ssl_session_cache shared:SSL:1m;
     ssl_session_timeout 5m;

     #自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
     #TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
     ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

     #表示优先使用服务端加密套件。默认开启
     ssl_prefer_server_ciphers on;


    location / {
           root html;
           index index.html index.htm;
    }
}

强制使用 HTTPS

server {
    listen 80;
    server_name <yourdomain>;
    # rewrite ^(.*)$  https://$host$1 permanent;
    return 301 https://$server_name$request_uri;
    location ~ / {
        root /var/www/html/8080;
        index index.html index.php index.htm;
      }
    }

Https 握手全过程

我们在本地客户端(Browser)发起对服务器(Server)的 HTTPS 请求,然后使用 WireShark 进行抓包。

握手大致流程如下图

image.png

图解

  • TCP/IP 三次握手

image.png

  • client Hello

image.png

  • Server Hello
  • Certificate 、Server Key Exchange 、ServerHello Done

image.png

  • Client key Exchange

image.png

  • Session

image.png

https 证书查看

  • 这里用了 bing.com 的

image.png image.png

HTTPS 的性能优化

  • 启用 TLS 1.3:TLS 1.3 是最新的安全协议版本,它减少了握手过程中的往返次数(RTT),最快能够在一次 RTT 内完成握手,显著提升了建立安全连接的速度。
  • 会话重用技术:使用 Session ID 或 Session Ticket 等技术,减少 TLS 握手过程。
  • OCSP Stapling开启 OCSP Stapling 功能,减少证书验证的时间,它通过将证书颁发机构(CA)的响应缓存在 Web 服务器上,从而避免了每次客户端发起连接时都要进行 OCSP 查询的开销。

image.png

结语

我们通过基础概念了解了 https 在生产中的重要性,了解 CA 证书,通过部署案例,让我们系统拥有 https 能力,最后通过图解 https 握手过程,了解 https 建立的全过程,还补充了部分 https 的性能优化,希望对你的学习有所帮助