目录

一、什么是SSL?
SSL(Secure Sockets Layer,安全套阶层)
是一种 用于在互联网上建立加密链接 的协议,旨在确保客户端(如浏览器)与服务器之间的通信安全。SSL 通过加密数据传输,防止敏感信息(如登录凭证、信用卡号等)被窃取或篡改。SSL的后续版本称为 TLS(Transport Layer Security,传输层安全)
,但人们通常仍习惯称之为 SSL。
在 OSI/RM 七层网络模型中,SSL/TLS
协议位于 传输层。

当然,传输层除了 SSL/TLS 协议之外,还有很多常用的其他协议,如下所示:

完整的《常用网络协议神图》可以参考小编之前的文章:
1.1 SSL 的主要功能
加密通信:
SSL 通过加密算法(如AES、RSA等)对传输的数据进行加密,确保数据在传输过程中即使被截获也无法被解读。
身份验证:
SSL 的身份认证可以防止中间人攻击,有以下两种形式:
- 单向认证: 通过数字证书,只验证服务器的身份。
- 双向认证: 通过数字证书,同时验证客户端和服务器身份。
(这两种身份验证形式会在后面进行详细描述。)
数据完整性:
SSL 通过消息摘要算法(如:SHA-256)确保数据在传输过程中未被篡改。
1.2 SSL 的工作原理
SSL/TLS
协议通过以下步骤建立安全连接:
客户端发起请求:
客户端(如浏览器)向服务器发起连接请求,并告知支持的 SSL/TLS 版本和加密算法。
服务器响应并发送证书:
服务器返回选择的 SSL/TLS 版本和加密算法,同时发送自己的数字证书(包含公钥)。
客户端验证证书:
客户端验证服务器证书的有效性(如是否由受信任的 CA 签发、是否过期等)。
密钥交换:
客户端生成一个对称密钥(会话密钥),用服务器的公钥加密后发送给服务器。
建立加密通信:
服务器用私钥解密获取对称密钥,双方使用该密钥加密后续通信。
1.3 SSL 的核心组件
数字证书:
由受信任的证书颁发机构(CA)签发,包含公钥、持有者信息和 CA 的数字签名。
加密算法:
- 对称加密(如AES):用于加密实际数据传输。
- 非对称加密(如RSA):用于密钥交换和身份验证。
协议版本:
SSL 1.0
、SSL 2.0
、SSL 3.0
-- 已淘汰。TLS 1.0
、TLS 1.1
、TLS 1.2
、TLS 1.3
-- 目前广泛使用。
1.4 SSL 的应用场景
网站安全(HTTPS):
SSL/TLS 是 HTTPS 协议的基础,用于保护网站与用户之间的通信。
电子邮件安全:
用于加密电子邮件传输(如SMTP、IMAP、POP3协议)。
虚拟专用网络(VPN):
SSL VPN 用于远程用户安全访问企业内部资源。
API 通信:
保护客户端与服务器之间的 API 调用。
1.5 SSL 与 TLS 的区别
SSL
是TLS
的前身,TLS
是SSL
的升级版本。SSL 3.0
是 SSL 的最后一个版本,TLS 1.0
基于SSL 3.0
改进而来。- TLS 在安全性、性能和扩展性上优于 SSL,目前广泛使用的是
TLS 1.2
和TLS 1.3
。
二、SSL 单向认证、双向认证
2.1 SSL 单向认证
SSL 单向认证只需要验证 服务端 的身份,无需验证客户端的身份。
SSL 单向认证的流程如下图所示:

文字过程描述如下:
客户端的浏览器向服务器传送 客户端 SSL协议的版本号、加密算法的种类、产生的 随机数,以及其他服务器和客户端之间通讯所需要的各种信息。
服务器向客户端传送 SSL协议的版本号、加密算法的种类、随机数 以及其他相关信息,同时服务器还将向客户端传送自己的 证书。
客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:
- 证书是否 过期。
- 发行服务器证书的CA是否 可靠。
- 发行者证书的公钥能否正确解开服务器证书的 “发行者的数字签名”。
- 服务器证书上的 域名 是否和服务器的实际域名相匹配。
- 如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进行第四步。
用户端随机产生一个用于后面通讯的"对称密码",然后用服务器的 公钥(服务器的公钥从步骤②中的服务器的证书中获得)对其加密,然后将加密后的 “预主密码” 传给服务器。
也就是说利用 非对称加密算法A传输对称加密的密钥B,后续都用密钥B传输,提高效率。
如果服务器要求客户的身份认证(在握手过程中为可选),用户可以建立一个随机数然后对其进行数据签名,将这个含有签名的随机数和客户自己的 证书 以及加密过的 “预主密码” 一起传给服务器。
如果服务器要求客户的身份认证,服务器必须检验客户证书和签名随机数的合法性,具体的合法性验证过程包括:
- 客户的证书使用日期是否 有效。
- 为客户提供证书的CA是否 可靠。
- 发行CA的公钥能否正确解开客户证书的发行CA的 数字签名。
- 检查客户的证书是否在 证书废止列表(CRL) 中。
- 检验如果没有通过,通讯立刻中断;如果验证通过,服务器将用自己的 私钥 解开加密的 “预主密码”,然后执行一系列步骤来产生主通讯密码(客户端也将通过同样的方法产生相同的主通讯密码)。
服务器和客户端用相同的主密码,即 “通话密码”,一个 对称密钥 用于SSL协议的安全数据通讯的加解密通讯。同时在SSL通讯过程中还要完成数据通讯的 完整性,防止数据通讯中的任何变化。
客户端向服务器端发出信息,指明后面的数据通讯将使用的步骤⑦中的 主密码 为对称密钥,同时通知服务器客户端的握手过程结束。
服务器向客户端发出信息,指明后面的数据通讯将使用的步骤⑦中的 主密码 为对称密钥,同时通知客户端服务器端的握手过程结束。
SSL的握手部分结束,SSL安全通道的数据通讯开始,客户和服务器开始使用相同的 对称密钥 进行数据通讯,同时进行通讯完整性的检验。
注意:SSL单向认证只要求站点部署了ssl证书就行,任何用户都可以去访问(IP被限制除外等),只是服务端提供了身份认证。
2.2 SSL 双向认证
SSL 双向认证需要验证 客户端 和 服务端 的身份。
SSL 双向认证的流程如下图所示:

文字过程描述如下:
- 浏览器发送一个连接请求给安全服务器。
- 服务器将自己的证书,以及同证书相关的信息发送给客户浏览器。
- 客户浏览器检查服务器送过来的证书 是否是由自己信赖的 CA中心(如沃通CA)所签发的。如果是,就继续执行协议;如果不是,客户浏览器就给客户一个警告消息:警告客户这个证书不是可以信赖的,询问客户是否需要继续。
- 接着 客户浏览器比较证书里的消息,例如 域名 和 公钥,与服务器刚刚发送的相关消息是否一致,如果是一致的,客户浏览器认可这个服务器的合法身份。
- 服务器要求客户发送客户自己的证书。收到后,服务器验证客户的证书,如果没有通过验证,拒绝连接;如果通过验证,服务器获得用户的 公钥。
- 客户浏览器告诉服务器自己所能够支持的通讯对称密码方案。
- 服务器从客户发送过来的密码方案中,选择一种 加密程度最高的密码方案,用客户的 公钥 加过密后通知浏览器。
- 浏览器针对这个密码方案,选择一个 通话密钥,接着用服务器的 公钥 加过密后发送给服务器。
- 服务器接收到浏览器送过来的消息,用自己的 私钥 解密,获得 通话密钥。
- 服务器、浏览器接下来的通讯都是用对称密码方案,对称密钥 是加过密的。
2.3 总结:SSL 单向认证和双向认证的区别
- 证书要求:
- SSL 单向认证: 仅服务端需要持有证书,客户端无需证书。
- SSL 双向认证:服务端和客户端均需持有证书。
- 认证过程:
- SSL 单向认证:客户端验证服务端证书的有效性,服务端无需验证客户端身份。服务端向客户端发送的密码方案是未加密的,但这并不影响整体通信的安全性。
- SSL 双向认证:客户端和服务端互相验证对方证书的有效性,确保双方身份可信。
- 适用场景:
- SSL 单向认证:适用于大多数 Web 应用(如电商、社交平台等),用户数量庞大,通常无需在通信层对客户端进行身份验证。
- SSL 双向认证:适用于对安全性要求较高的场景(如金融行业应用对接),需要对客户端进行严格的身份验证,以确保通信双方的可信性。
- 性能与复杂性:
- SSL 单向认证:实现简单,性能开销较低,适合高并发场景。
- SSL 双向认证:实现复杂,性能开销较高,适合对安全性要求极高的场景。
整理完毕,完结撒花~ 🌻
参考地址:
1.SSL 单向认证和双向认证说明,https://cloud.tencent.com/document/product/214/54254
2.【ssl认证、证书】SSL双向认证和SSL单向认证的区别(示意图),https://blog.csdn.net/m0_45406092/article/details/114638087