
文章内容为作者在学习相关知识时记录的一些浅显的笔记,如果错误请指正,非常感谢🙏🙏
TLS(Transport Layer Security)证书是互联网安全通信的基础,它确保了用户与网站之间的数据传输加密,防止中间人攻击。以下是关键概念及它们之间的关系:

在 TLS 证书体系中,中间 CA(Intermediate Certificate Authority) 和 根 CA(Root Certificate Authority) 共同构成了一个 分层的信任链 。它们的分工和协作是互联网安全的核心机制之一。
根 CA 和中间 CA 的分层结构是 安全性和可扩展性的平衡 ,原因如下:
当浏览器访问 HTTPS 网站时,会验证证书链的完整性:

最终的证书文件包含:
OpenSSL 工具使用 openssl s_client 连接到目标网站,获取证书链,再用 openssl x509 解析证书内容。
echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -text -noout
输出解析 :Subject :证书持有者(如 CN = example.com)。
Issuer :证书颁发机构(如 Let's Encrypt)。
Validity :有效期(Not Before 和 Not After)。
Subject Alternative Name (SAN) :扩展域名(如 DNS:example.com, DNS:*.example.com)。
Public Key :公钥算法和长度(如 RSA 2048 bits)。
Signature Algorithm :签名算法(如 SHA256 with RSA)。
以baidu.com为例:



openssl s_client -connect example.com:443 -showcerts 2>/dev/null
确保证书中的域名与访问的域名一致:
命令示例 :
openssl x509 -noout -subject -ext subjectAltName \
-in <(openssl s_client -connect example.com:443 2>/dev/null | openssl x509)CRL Distribution Points 获取 CRL URL。# 获取证书序列号
openssl x509 -noout -serial -in <(openssl s_client -connect example.com:443 2>/dev/null | openssl x509)
# 下载 CRL(以 Let's Encrypt 为例)
wget http://crl.identrust.com/DSTROOTCAX3.crl
# 将 CRL 转换为文本格式
openssl crl -inform DER -text -in DSTROOTCAX3.crlopenssl x509 -noout -ocsp_uri \
-in <(openssl s_client -connect example.com:443 2>/dev/null | openssl x509)openssl ocsp -issuer <(openssl s_client -connect example.com:443 2>/dev/null | openssl x509) \
-cert <(openssl s_client -connect example.com:443 2>/dev/null | openssl x509) \
-url http://ocsp.example.com命令示例:
# 查看证书基本信息
curl -vI https://example.com 2>&1 | grep "SSL certificate"
# 输出证书详细信息
curl --insecure -vI https://example.com 2>&1 | awk '/BEGIN CERTIFICATE/,/END CERTIFICATE/'curl -vI https://www.baidu.com 2>&1 | grep "SSL certificate"
* SSL certificate verify ok.TLS 1.2 是当前仍广泛使用的协议版本,其握手过程相比 TLS 1.3 更为复杂,通常需要 2 个 RTT(往返时间) ,但支持更广泛的加密算法和兼容性。以下是完整的 TLS 1.2 握手流程解析:
ClientHelloTLS_ECDHE_RAS+WITH_AES_128_GCM_SHA256ServerHelloTLS_RSA_WITH_AES_256_CBC_SHA256。null(现代服务通常禁用压缩)。CertificateServerKeyExchage (可选,根据加密套件决定)ServerHelloDoneClientKeyExchangeChangeCipherSpecFinishedChangeCipherSpecFinished
ClientHelloTLS_AES_256_GCM_SHA384ServerHelloTLS_CHACHA20_POLY1305_SHA256**。EncryptedExtensions。EncryptedExtensionssigned_certificate_timestamp**(用于证书透明性)。example.com 的公钥证书)。CertificateVerifyClientHello 和 ServerHello)生成签名,并发送给客户端Finished 消息Finished 消息的摘要(如 HMAC),验证握手消息的完整性二、图示TLS 1.3 握手过程

tls.handshake.type == 1 or tls.handshake.type == 2ClientHello → ServerHello → EncryptedExtensions → Certificate → CertificateVerify → Finished这样就能看到完整的SSL交互过程


客户端向服务器发起的Client Hello消息
发送的内容有TLS版本: TLS 1.3

随机数(Client Random)、加密套件(Cipher Suites)、扩展列表都有

Sever开始回复客户端Server Hello

Server Hello之后,服务器发了一个证书,并且发送Finished 消息



客户端用证书中的公钥验证签名,发送Finished 消息


握手结束后,加密通信开始

这里配置 Wireshark 解密 了TLS 流量


原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。