HTTPS 安全证书学习笔记

发布时间:2026/10/28 1:53:33
HTTPS 安全证书学习笔记

HTTPS 安全证书学习笔记

一、HTTPS 是什么?

HTTPS = HTTP + TLS。

HTTP 负责传输请求和响应,TLS 负责建立安全通信连接,提供加密、完整性保护和身份认证。

例如:

HTTP: http://api.example.com HTTPS:https://api.example.com

HTTP 本身不提供传输加密,而 HTTPS 通过 TLS 保护通信数据。

HTTPS 主要解决三个问题

  1. 数据加密:防止通信内容被轻易窃听。
  2. 身份认证:帮助浏览器验证服务器身份。
  3. 数据完整性:检测传输过程中数据是否被篡改。

注意:HTTPS 不代表网站本身绝对安全,也不代表用户一定有权限访问该网站的业务接口。

二、HTTPS 的核心概念

概念通俗理解主要作用
数字证书服务器的数字身份证将公钥与域名等身份信息绑定
CA证书颁发机构验证申请条件并签发证书
公钥可以公开的信息用于验证签名或参与密钥建立等操作
私钥必须保密的秘密用于服务器身份认证等密码学操作
TLS安全通信协议负责身份认证、密钥协商和加密传输
对称密钥双方共同使用的通信密钥高效加密实际传输的数据

重要理解

证书不是用来判断用户有没有权限访问服务器的。

证书主要帮助浏览器判断:

我连接的服务器,是否确实是我要访问的那个域名对应的服务器?

而用户是否有权限访问具体接口,由应用自身的认证、授权机制决定。

三、HTTPS 的工作流程

以浏览器访问 Java 后端为例。

第一步:浏览器发起请求

用户访问:

https://api.example.com

浏览器先建立 TCP 连接,然后开始 TLS 握手。

浏览器会发送 ClientHello,其中包含支持的 TLS 版本、密码套件、密钥交换参数等信息。

第二步:服务器发送证书

服务器发送证书链以及握手认证所需的信息。

证书中包含域名、公钥、有效期、签发者等信息。

服务器同时持有与证书对应的私钥,但私钥不能发送给浏览器。

第三步:浏览器验证证书

浏览器主要检查:

  1. 证书链是否能够验证到受信任的根证书。
  2. 证书中的域名是否与访问的域名匹配。
  3. 证书是否有效,是否过期。
  4. 证书签名和用途等是否符合要求。
  5. 服务器是否能够证明自己持有对应的私钥。

如果验证失败,浏览器可能提示证书错误或阻止安全连接。

第四步:双方建立共享密钥

现代 TLS 通常使用 ECDHE 等密钥交换机制。

简化理解:

  1. 浏览器生成临时密钥材料。
  2. 服务器生成临时密钥材料。
  3. 双方交换公开的密钥交换参数。
  4. 双方分别计算出相同的共享秘密。
  5. 根据共享秘密和握手上下文,派生出实际通信所需的密钥。

共享秘密不需要直接通过网络发送。

证书和握手签名则用于验证服务器身份,防止攻击者冒充服务器。

注意:现代 TLS 1.3 通常不是使用服务器证书公钥加密一个会话密钥,再让服务器用私钥解密的传统 RSA 密钥交换方式。

第五步:加密传输 HTTP 数据

握手完成后,浏览器与服务器使用协商出的通信密钥保护 HTTP 请求和响应。

例如:

POST /login HTTP/1.1 Host: api.example.com Content-Type: application/json {"username":"admin","password":"123456"}

在 HTTPS 连接中,这些 HTTP 数据会受到 TLS 加密和完整性保护。

因此,中间人即使截获网络流量,通常也无法直接读取其中的明文密码。

四、宝塔为什么可以申请免费证书?

宝塔主要负责自动化申请和部署证书,本身不一定是证书的签发机构。

典型流程:

用户在宝塔申请证书 | v 验证域名控制权 | v CA 签发证书 | v 宝塔安装证书和私钥 | v 配置 Nginx / Apache | v 网站启用 HTTPS

例如 Let’s Encrypt 就是提供免费证书的 CA。

免费证书和付费证书有什么区别?

类型特点
免费 DV 证书验证域名控制权,适合个人网站、API 和常见业务系统
付费 DV 证书核心身份验证类型相同,可能提供额外服务或品牌支持
OV / EV 证书额外核验组织身份,适合有企业身份展示或相关要求的场景

免费不等于不安全。

只要证书受客户端信任、配置正确、私钥安全,免费 DV 证书也能提供可靠的 HTTPS 加密。

证书续期

以 Let’s Encrypt 为例,证书默认有效期通常为 90 天。

部署时需要注意:

  • 确认自动续期正常。
  • 确认域名验证能够成功。
  • 确认证书更新后服务已加载新证书。
  • 监控证书到期时间,避免过期导致访问异常。

五、HTTPS 与后端权限控制的区别

这部分对 Java 后端开发非常重要。

机制解决的问题示例
TLS 证书验证服务器身份是否可信是否连接到正确的 API 域名
HTTPS 加密传输数据是否受到保护防止登录密码被网络窃听
用户认证当前用户是谁Session、JWT
权限校验用户能访问什么资源RBAC、接口权限
业务校验操作是否符合业务规则订单状态、支付金额校验

例如,用户通过 HTTPS 调用:

POST /api/orders/1001/pay

即使 HTTPS 连接完全正常,后端仍然需要判断:

  1. 用户是否已登录?
  2. 用户是否有权操作订单 1001?
  3. 订单当前状态是否允许支付?
  4. 支付金额是否正确?

HTTPS 不能替代这些业务安全检查。

六、HTTPS 在 Nginx 与 Java 后端之间的应用

常见部署结构:

浏览器 | | HTTPS v Nginx | | HTTP 或 HTTPS v Java 后端

如果 Nginx 和 Java 之间使用 HTTP,那么这一段没有 TLS 加密保护。

如果它们通过本机回环地址通信,例如127.0.0.1:8080,风险与跨公网传输不同;如果经过不可信网络,则应考虑使用 HTTPS 或其他可靠的链路保护机制。

HTTPS 只保护实际启用了 TLS 的通信链路,不会自动加密整个后端调用链。

七、常见误区

误区 1:免费证书不安全

错误。

可信 CA 签发的免费 DV 证书也可以提供可靠的 HTTPS 加密。

误区 2:有 HTTPS 就说明网站绝对安全

错误。

HTTPS 保护通信,不代表网站没有漏洞,也不代表网站运营者一定可信。

误区 3:证书负责判断用户有没有权限

错误。

证书主要用于服务器身份认证。用户身份和业务权限需要应用自身判断。

误区 4:私钥可以随便发给浏览器

错误。

私钥必须保密。服务器只需要发送证书链和协议规定的握手信息。

误区 5:HTTPS 只使用公钥加密数据

错误。

现代 HTTPS 通常先通过密钥交换建立共享秘密,再使用对称加密保护实际传输的数据。

八、最终总结

记住以下五句话:

  1. 证书是数字身份证:帮助浏览器验证服务器身份。
  2. CA 是证书颁发机构:负责验证申请条件并签发证书。
  3. TLS 是安全通信机制:负责身份认证、密钥协商和加密传输。
  4. 免费证书同样可以安全:关键在于证书可信、配置正确、私钥安全。
  5. HTTPS 不等于业务权限控制:后端仍然必须进行认证、授权和业务校验。

整个 HTTPS 流程可以浓缩为:

浏览器发起连接 ↓ 服务器提供证书 ↓ 浏览器验证服务器身份 ↓ 双方协商通信密钥 ↓ 使用 TLS 加密传输 HTTP 数据