案例

SSH 客户端 → 服务器

客户端:
生成密钥对 (公钥 + 私钥)
私钥保存在客户端
服务器:
保存客户端公钥到 ~/.ssh/authorized_keys
发起连接时生成随机 challenge
流程:
1. 客户端发起 SSH 连接
2. 服务器发送 challenge
3. 客户端用私钥签名 challenge
4. 服务器用公钥验证签名
5. 验证成功 → 允许登录
公钥位置:服务器
私钥位置:客户端
信任机制:authorized_keys 文件


HTTPS 浏览器 → 网站服务器

服务器:
生成密钥对 (公钥 + 私钥)
用公钥向 CA 申请证书
部署证书和私钥
浏览器:
拿到服务器发送的证书
根 CA 内置公钥验证证书签名
流程:

1. 浏览器访问 HTTPS 网站
    2. 服务器发送证书(含公钥 + CA 签名)
    3. 浏览器验证证书合法性
    4. 浏览器生成随机会话密钥,用证书公钥加密发送给服务器
    5. 服务器用私钥解密会话密钥
    6. 双方建立加密通道,安全通信
        公钥位置:客户端(证书里)
        私钥位置:服务器
        信任机制:浏览器根 CA 公钥 + CA 签名链

理解证书、公钥与私钥:从 SSH 到 HTTPS 的安全通信原理

在现代计算机网络中,安全通信和身份验证是至关重要的部分。无论是 SSH 远程登录还是 HTTPS 网站访问,公钥和私钥的配对机制以及证书体系都保证了数据传输的安全性和身份的可信度。本文将系统讲解证书和密钥的原理、使用方式以及 SSH 与 HTTPS 的区别,并结合常见场景解析相关流程。


一、公钥与私钥基础

1. 密钥对概念

  • 公钥(Public Key):可以公开给任何人,用于加密数据或验证签名。
  • 私钥(Private Key):必须严格保密,用于解密数据或生成数字签名。

公钥和私钥是一一对应的配对关系。公钥公开,私钥保密,通过这种机制可以保证数据的机密性、完整性和身份的唯一性。

2. 私钥的作用

私钥主要有两个作用:

  1. 解密:通过公钥加密的数据,只有持有私钥的人能解密。
  2. 签名:私钥可以对数据生成数字签名,任何人都可以使用配套公钥验证签名,从而确认数据来源的真实性。

二、证书的作用和组成

1. 证书的本质

X.509 证书是一种数据结构,本质上是 公钥与身份信息的可信绑定
证书告诉使用者:

“这是某个身份的公钥,我(CA)保证它确实属于它声称的身份。”

2. 证书包含的内容

  • 公钥:用于加密通信或验证签名。
  • 身份信息:如域名或用户信息。
  • CA 签名:由受信任的证书颁发机构签发,用于验证证书的可信性。
  • 有效期:证书的开始和结束时间,过期后需要更新。

3. 公钥在证书中的作用

证书里的公钥是整个安全通信的核心:

  1. 加密:客户端可以使用证书里的公钥加密数据(如 HTTPS 会话密钥)。
  2. 签名验证:用于验证服务器或客户端发送的数据是否由私钥持有者生成。
  3. 防止冒充:证书绑定了身份信息和公钥,即使有人冒充域名,也无法伪造有效签名。

4. 私钥与证书的关系

  • 私钥由证书持有者保管,用于解密或签名。
  • 公钥在证书里公开,供通信另一方使用。
  • 通过公钥和私钥的配合,实现安全通信和身份验证。

三、SSH 免密登录原理

SSH 免密登录利用公钥和私钥配对机制,实现客户端登录服务器而无需输入密码。

1. 密钥生成与分发

  1. 客户端生成密钥对(公钥 + 私钥)。
  2. 公钥上传到服务器,存放在 ~/.ssh/authorized_keys 文件中。
  3. 私钥保存在客户端本地,绝对不能泄露。

2. 登录认证流程

  1. 客户端发起 SSH 连接请求。
  2. 服务器随机生成 challenge(随机数)。
  3. 客户端用私钥对 challenge 签名,并返回服务器。
  4. 服务器用公钥验证签名:
    • 验证通过 → 允许登录
    • 验证失败 → 拒绝登录

3. 公钥放在服务器的原因

服务器需要公钥来验证客户端的签名,authorized_keys 就是服务器的“信任区”,用来确认哪些客户端可以免密登录。


四、HTTPS 安全通信原理

HTTPS 使用 TLS 协议,实现浏览器与网站之间的安全通信。

1. 网站证书与私钥

  • 网站证书:包含公钥、域名信息和 CA 签名。
  • 网站私钥:保存在服务器端,用于解密客户端发送的会话密钥或签名数据。

2. 连接流程

  1. 浏览器访问 HTTPS 网站。
  2. 服务器发送证书给浏览器。
  3. 浏览器验证证书:
    • 用根 CA / 中间 CA 公钥验证签名
    • 验证域名匹配
    • 验证有效期
  4. 浏览器生成随机对称会话密钥,用证书公钥加密发送给服务器。
  5. 服务器用私钥解密 → 双方建立加密通信通道。
  6. 浏览器和服务器通过会话密钥进行加密数据传输。

3. 公钥与私钥的位置

  • 服务器端:私钥保密,用于解密或签名。
  • 客户端:公钥在证书里,用于加密或验证签名。
  • 每次新建 TLS 连接时,服务器会发送证书给浏览器,保证身份认证和安全通信。

五、SSH 与 HTTPS 的关键区别

特性 HTTPS SSH
私钥位置 服务器 客户端
公钥位置 证书发给客户端 authorized_keys 在服务器
主动证明身份 服务器证明自己 客户端证明自己
信任机制 浏览器通过 CA 根公钥验证证书签名 服务器通过 authorized_keys 验证客户端签名

六、证书过期与安全考虑

  • 证书过期:指证书的有效期已结束,浏览器会提示不安全。
  • 原因
    • 限制风险:即使密钥泄露,也只在有效期内有效。
    • 推动算法升级:过期证书可以更换使用更安全算法的证书。
  • 注意:证书过期并不是公钥本身过期,而是公钥绑定的身份认证到期。

七、总结

  1. 公钥与私钥:配对使用,保证数据加密、签名验证和身份认证。
  2. 证书:把公钥和身份信息通过 CA 签名绑定,建立信任。
  3. SSH:公钥在服务器,客户端用私钥签名,服务器验证 → 客户端免密登录。
  4. HTTPS:公钥在证书里发给客户端,服务器用私钥解密或签名,浏览器验证证书 → 安全通信。
  5. 信任机制:SSH 使用 authorized_keys,HTTPS 使用 CA 根公钥和签名链。
  6. 证书有效期:保证安全性并推动算法更新,不是公钥本身过期。