服务器证书原理
CA(Certificate Authority)证书是由 证书颁发机构(CA)本身签名的。具体来说,这取决于 CA 的类型和其在信任链中的位置:
1. 自签名证书
- 根 CA 证书 是信任链的起点,由 CA 自己签名。
- 它们是信任链的基础,浏览器或操作系统通过内置的信任列表信任这些根证书。
- 根证书签名过程:
- 使用 CA 的私钥对其证书的内容进行签名。
- 验证时,使用该 CA 的公钥即可验证签名。
2. 中间 CA 证书
- 中间 CA 证书 是由上一级 CA 签名的。
- 中间 CA 的签名过程:
- 上一级 CA 使用其私钥对中间 CA 的证书进行签名。
- 这样,中间 CA 证书与根证书构成信任链。
- 中间 CA 证书减少了根证书私钥的使用频率,从而提高了安全性。
3. 最终用户证书
- 最终用户证书(例如网站的 SSL/TLS 证书)是由中间 CA 签名的。
- 它们位于信任链的末端,为具体的实体(如网站或组织)提供身份验证。
- 最终用户证书的签名过程:
- 中间 CA 使用其私钥对用户证书签名。
- 通过中间 CA 证书和根 CA 证书,验证信任链完整性。
信任链示例
以下是一个典型的信任链:
- 根 CA 自签名 →
- 中间 CA 由根 CA 签名 →
- 最终用户证书 由中间 CA 签名。
总结
- 根 CA 证书 是自签名的,由 CA 自己签名。
- 中间 CA 和最终用户证书 是由上一级 CA 签名的。
- 浏览器或操作系统信任的根 CA 证书构成信任链的基础,通过逐级验证签名,最终信任用户证书。
以下是一个典型的 X.509 证书的例子,以及对其中字段的详细解析:
证书例子(PEM 格式)
-----BEGIN CERTIFICATE-----
MIIDdzCCAl+gAwIBAgIEUjGH3zANBgkqhkiG9w0BAQsFADB1MQswCQYDVQQGEwJV
UzELMAkGA1UECBMCTkMxEzARBgNVBAcTClNvbWV3aGVyZTEXMBUGA1UEChMOSGVs
bG8gQ29ycC4xEjAQBgNVBAMTCXNvbWVjZXJ0MB4XDTIzMDEwMTAwMDAwMFoXDTMz
MDEwMTAwMDAwMFowdTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAk5DMRMwEQYDVQQH
EwpTb21ld2hlcmUxFzAVBgNVBAoTDkhlbGxvIENvcnAuMRIwEAYDVQQDEwlsb2Nh
bGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDWmIz+1q1HxkbD
...
-----END CERTIFICATE-----
字段解析
X.509 证书包含多个字段,这些字段可以通过解析工具或代码提取查看。
1. 版本(Version)
Version: 3
- 标记证书使用的 X.509 版本号。
- 当前标准为版本 3。
2. 序列号(Serial Number)
Serial Number: 159753
- 唯一标识证书的整数值。
- 由颁发机构分配,用于区分其签发的每张证书。
3. 签名算法(Signature Algorithm)
Signature Algorithm: sha256WithRSAEncryption
- 描述用于对证书签名的算法(如 SHA-256 + RSA)。
4. 发行者(Issuer)
Issuer: C=US, ST=NC, O=Hello Corp., CN=somecert
- 颁发证书的 CA 信息:
C
: 国家(Country)ST
: 州或省(State/Province)O
: 组织(Organization)CN
: 公共名称(Common Name)
5. 有效期(Validity)
Not Before: Jan 1 00:00:00 2023 GMT
Not After : Jan 1 00:00:00 2033 GMT
- 指定证书的生效时间和过期时间。
6. 主题(Subject)
Subject: C=US, ST=NC, O=Hello Corp., CN=localhost
- 持有证书实体的信息(例如网站、用户或设备):
- 与
Issuer
字段的格式类似。
- 与
7. 主公钥(Subject Public Key Info)
Subject Public Key Info:Public Key Algorithm: rsaEncryptionRSA Public-Key: (2048 bit)Modulus:00:b7:31:e5:91:21:3d:...Exponent: 65537 (0x10001)
- 包含证书持有者的公钥信息:
- 公钥算法:如 RSA、ECDSA。
- 模数(Modulus):用于 RSA 公钥。
- 指数(Exponent):通常为 65537。
8. 扩展字段(Extensions)
扩展字段为版本 3 中新增,包含额外信息。
基本约束(Basic Constraints)
X509v3 Basic Constraints: criticalCA:TRUE
CA:TRUE
表示该证书是 CA 证书。
密钥用途(Key Usage)
X509v3 Key Usage: criticalDigital Signature, Certificate Sign
- 定义证书的用途,如签名、密钥加密、证书签发。
扩展密钥用途(Extended Key Usage)
X509v3 Extended Key Usage:TLS Web Server Authentication, TLS Web Client Authentication
- 特定用途的扩展:
TLS Web Server Authentication
:HTTPS 服务器验证。TLS Web Client Authentication
:客户端验证。
主题备用名称(Subject Alternative Name, SAN)
X509v3 Subject Alternative Name:DNS:example.com, DNS:www.example.com, IP Address:192.168.1.1
- 定义证书绑定的域名和 IP 地址。
9. 签名(Signature)
Signature Algorithm: sha256WithRSAEncryption
Signature Value:72:a3:12:...:e5
- CA 使用其私钥对证书的签名。
- 验证时,使用 CA 的公钥检查签名是否有效。
工具解析 X.509 证书
OpenSSL
openssl x509 -in certificate.pem -text -noout
结果输出示例
Certificate:Data:Version: 3 (0x2)Serial Number:01:02:03:04Signature Algorithm: sha256WithRSAEncryptionIssuer: C=US, O=Example CAValidityNot Before: Jan 1 00:00:00 2023 GMTNot After : Jan 1 00:00:00 2033 GMTSubject: C=US, O=Example Organization, CN=example.comSubject Public Key Info:Public Key Algorithm: rsaEncryptionRSA Public-Key: (2048 bit)Modulus:00:c1:23:...Exponent: 65537 (0x10001)X509v3 extensions:X509v3 Basic Constraints:CA:FALSEX509v3 Key Usage:Digital Signature, Key EnciphermentX509v3 Subject Alternative Name:DNS:example.com, DNS:www.example.com
总结
X.509 证书包含详细的字段用于身份验证、安全通信等任务。它通过 Issuer
(颁发者)、Subject
(持有者)、Public Key Info
(公钥信息)等核心字段构建信任链,同时扩展字段(如 SAN、Key Usage)定义其具体用途。
X.509 证书的签名过程是对证书的特定字段进行摘要处理,然后使用证书颁发机构(CA)的私钥对摘要结果进行加密。签名用于验证证书的完整性和来源。
签名是对哪些字段实行摘要处理?
签名涵盖的是证书的TBS(To Be Signed)部分,即证书主体部分。以下是具体包括的字段:
1. 版本号(Version)
- 指示 X.509 证书的版本(通常为 3)。
2. 序列号(Serial Number)
- 证书的唯一标识。
3. 签名算法标识符(Signature Algorithm Identifier)
- 表示 CA 选择的签名算法,例如
sha256WithRSAEncryption
。
4. 发行者信息(Issuer)
- 描述颁发证书的 CA 信息,包括组织名称、国家代码等。
5. 有效期(Validity)
- 包括两个子字段:
- Not Before:证书的起始生效时间。
- Not After:证书的过期时间。
6. 持有者信息(Subject)
- 描述证书持有者的信息,如域名、组织、邮箱等。
7. 主公钥信息(Subject Public Key Info)
- 包括:
- 公钥算法(如 RSA、ECDSA 等)。
- 公钥内容(例如 RSA 的模数和指数)。
8. 扩展字段(Extensions,版本 3 特有)
- 包括:
- 基本约束(Basic Constraints)
- 密钥用途(Key Usage)
- 扩展密钥用途(Extended Key Usage)
- 主题备用名称(Subject Alternative Name, SAN)
- 其他扩展。
签名流程
-
确定 TBS 部分:
- 将上述字段按照 ASN.1 编码(DER 格式)组合为一个二进制数据。
-
生成摘要:
- 使用指定的摘要算法(如 SHA-256)对 TBS 部分生成消息摘要。
-
签名摘要:
- 使用 CA 的私钥对消息摘要加密,生成签名。
-
添加到证书:
- 将签名值和签名算法附加到证书。
验证流程
- 从证书中提取 TBS 部分。
- 根据证书中的签名算法对 TBS 部分重新计算摘要。
- 使用 CA 的公钥解密签名值。
- 比较解密后的值与重新计算的摘要,若一致,则签名验证通过。
不包括的字段
签名过程不涵盖以下字段:
- 签名字段本身:签名是对
TBS
之外生成的,因此签名字段本身不被包含。 - 任何动态字段,例如证书的外部注释或额外的元信息。
通过这种方式,证书的签名确保了上述字段的完整性和不可篡改性。
浏览器验证证书的真实性时,会依据以下字段进行 CA 的查找和验证:
证书验证过程的关键字段
-
Issuer 字段
- 该字段标明证书的颁发者(Certificate Authority, CA),包括其国家(C)、组织名称(O)和通用名称(CN)。
- 作用:浏览器通过
Issuer
字段确定证书是由哪个 CA 签发的。
-
Subject Public Key Info
- 包含公钥信息,用于验证签名的正确性。
- 作用:浏览器利用 CA 的公钥来解密证书签名,确认它是否由声明的 CA 签发。
-
Signature
- 包含证书数据的数字签名,由 CA 的私钥生成。
- 作用:通过数字签名,验证证书内容是否完整且未被篡改。
-
Certificate Chain
- 每张证书会包含其
Issuer
,而浏览器会递归查找 CA 的上级证书,直到找到可信任的根证书。 - 作用:形成一个证书链,从服务器证书到受信任的根 CA。
- 每张证书会包含其
-
Authority Information Access (AIA) 扩展
- 可选字段,通常指向一个 URL,包含颁发 CA 的公钥证书。
- 作用:如果证书链中间部分缺失,浏览器可以通过 AIA URL 自动下载并补充。
浏览器的验证步骤
-
解析证书的
Issuer
字段- 查找与
Issuer
中描述的 CA 匹配的证书。 - 在本地的受信任根 CA 存储中查找,也可能通过 AIA 扩展或在线资源下载。
- 查找与
-
验证数字签名
- 使用上一级 CA 的公钥,验证证书的签名是否正确。
- 例如,浏览器会用上级 CA 的公钥解密当前证书的签名,并比较解密结果和当前证书的内容摘要。
-
检查证书链
- 确认证书链是否完整,所有中间证书是否与声明的 CA 一致。
- 从服务器证书开始,逐级验证每一级
Issuer
是否在本地或受信任的根 CA 列表中。
-
验证信任关系
- 确认最终的根 CA 是否在浏览器的受信任 CA 列表中。
- 例如,
Mozilla
,Microsoft
, 和Apple
会预装受信任 CA 列表。
-
检查证书有效期
- 验证证书是否在
Not Before
和Not After
规定的时间范围内。
- 验证证书是否在
-
检查吊销状态
- 检查是否通过 CRL(证书吊销列表)或 OCSP(在线证书状态协议)标记为吊销。
总结
- 浏览器根据证书的
Issuer
字段,结合 CA 的公钥验证签名,确保真实性。 - 然后通过
Certificate Chain
找到根证书,确保整个信任链是可信的。 - 最终,通过校验数字签名和证书吊销状态,判断证书的真实性和有效性。
CT Precertificate SCTs (Signed Certificate Timestamps) 解析
Signed Certificate Timestamps (SCTs) 是与证书透明性 (Certificate Transparency, CT) 相关的重要数据结构。它们是由公开日志服务器签名的时间戳,用于证明证书已经提交到 CT 日志中。这些信息对防止不受信任的证书的滥发非常关键。
字段解析
1. CT Precertificate SCTs
CT Precertificate SCTs 是证书透明性的一个组成部分。它们包含以下信息:
-
Version
- 显示 SCT 的版本。
- 示例:
v1 (0x0)
表示使用 CT 的第一版协议。
-
Log ID
- 由日志服务器生成的唯一标识符,用于识别该 SCT 是由哪个日志服务器生成的。
- 示例:
76:FF:88:3F:0A:B6:FB:95:51:C2:61:CC:F5:87:BA:34: B4:A4:CD:BB:29:DC:68:42:0A:9F:E6:67:4C:5A:3A:74
-
Timestamp
- 记录提交到日志服务器的时间戳。
- 格式:标准的 GMT 时间。
- 示例:
Sep 7 14:55:38.911 2024 GMT
。
-
Extensions
- 扩展字段,通常为空 (
none
)。
- 扩展字段,通常为空 (
-
Signature
- 使用
ecdsa-with-SHA256
签名算法对 SCT 进行签名,确保完整性和真实性。 - 签名数据:
30:44:02:20:1E:C0:96:A9:37:83:29:3E:08:BE:F5:3D:...
- 使用
2. 两个示例 SCT
在实际的证书中,通常包含多个 SCT,这些 SCT 来自不同的日志服务器。每个 SCT 包括上述字段的信息。
SCT 的作用
-
保证证书提交到 CT 日志
- SCT 是对证书已经提交到日志服务器的证明,目的是让证书的存在公开化。
-
增强信任
- 浏览器可以通过验证 SCT 确认证书的合法性,进而决定是否信任该证书。
-
防止证书滥发
- 强制要求证书颁发机构 (CA) 在发放证书时提交到 CT 日志,帮助检测和防范未经授权的证书。
如何验证 SCT
-
使用 OpenSSL OpenSSL 无法直接验证 SCT,但可以解析证书并检查 SCT 是否存在。
-
使用专用工具
- 工具如
certigo
或crt.sh
等可直接验证证书中的 SCT 信息。
- 工具如
-
手动解析并验证
- 提取证书中的 SCT,验证签名是否匹配日志服务器的公钥。
SCT 的上下文示例
在现代 HTTPS 环境下,CT 和 SCT 是证书生态系统的重要组成部分,尤其是在防范证书滥发和透明性方面。例如:
- Google Chrome 等浏览器要求证书必须附带 SCT,否则将提示“不受信任”。
这种机制对增强网络安全具有重要意义。
相关文章:

服务器证书原理
CA(Certificate Authority)证书是由 证书颁发机构(CA)本身签名的。具体来说,这取决于 CA 的类型和其在信任链中的位置: 1. 自签名证书 根 CA 证书 是信任链的起点,由 CA 自己签名。它们是信任链…...

重温设计模式--代理、中介者、适配器模式的异同
文章目录 1、相同点2、不同点 1、相同点 目的都是为了更好地处理对象之间的关系:这三种模式都是在软件设计中用于处理对象之间的关联和交互,以达到优化系统结构、增强可维护性等目的。它们都在一定程度上隐藏了对象之间的某些细节或者复杂性,…...

2024第十六届蓝桥杯模拟赛(第二期)-Python
# 2024第十六届蓝桥杯模拟赛(第二期)-Python题解 # 自己改注释# -----------------------1------------------------ # def prime(x): # if x < 2: # return 0 # for i in range(2, int(x ** 0.5) 1): # if x % i 0: # …...

分布式系统中的防抖策略一致性与性能优化
目录 引言分布式系统的挑战防抖策略简介确保多实例间一致性的方法 幂等操作TTL缓存 分布式一致性事件总线或消息队列异步任务调度器客户端或API网关层面的防抖一致性哈希与分区限流和熔断机制 避免锁竞争导致的性能瓶颈Java示例代码结论 引言 在现代软件架构中,…...

项目代码第6讲:UpdownController.cs;理解 工艺/工序 流程、机台信息;前端的“历史 警报/工艺 记录”
一、UpdownController.cs 1、前端传入 当用户在下图的“记录查询”中的 两个界面选项 中,点击“导出”功能时,向后端发起请求,请求服务器下载文件的权限 【权限是在Program.cs中检测的,这个控制器里只需要进行“谁在哪个接口下载了文件”的日志记录】 【导出:是用户把…...

【计算机视觉基础CV-图像分类】03-深度学习图像分类实战:鲜花数据集加载与预处理详解
本文将深入介绍鲜花分类数据集的加载与处理方式,同时详细解释代码的每一步骤并给出更丰富的实践建议和拓展思路。以实用为导向,为读者提供从数据组织、预处理、加载到可视化展示的完整过程,并为后续模型训练打下基础。 前言 在计算机视觉的深…...

大模型应用技术系列(一):大模型应用整体技术栈浅析
RAG相关的技术学习暂时告一段落了,接下来尝试探索新的学习方向。这就引入一个问题:接下来该做什么?为了能进一步推进,我需要有一个整体的视角,从更上层来看整个技术栈,从而确定接下来感兴趣的方向。本文主要探索从更上层的视角来看构建大模型的技术栈,从而进一步确定研究…...

绿色环保木塑复合材料自动化生产线设计书
《绿色环保木塑复合材料自动化生产线设计书》 一、项目概述 随着全球对环境保护和可持续发展的日益重视,绿色环保材料的研发与生产成为了热门领域。木塑复合材料作为一种新型的绿色环保材料,它将木材纤维与塑料通过特定工艺复合而成,兼具木材与塑料的双重特性,具有防水、…...

Sourcegraph 概述
Sourcegraph 报告 Sourcegraph 是一款强大的代码搜索和智能导航工具,专为大型代码库、分布式系统和跨多个仓库的开发环境设计。它能显著提高开发者对复杂系统的理解和维护效率,帮助团队在庞大的代码库中快速找到关键信息。本文将详细讲解 Sourcegraph 的…...

c 保存 csv格式的文件
在C语言中保存数据为CSV(逗号分隔值)格式的文件,你可以使用标准I/O库函数,如fprintf,来将数据写入文件,并确保每个字段之间用逗号分隔。以下是一个简单的示例,说明如何在C语言中创建一个CSV文件…...

C语言扫雷游戏教学(有图形界面)(提供源码+实验报告)(计时+排行榜+难度选择+登录注册+背景音乐)(涉及easyX库)
前言: 本篇文章篇幅较长,请根据自己的需求在目录上跳转对应内容哦!源码及实验报告的获取在文章的后面哦!本人代码水平不佳,希望本文章和项目能带给大家帮助! 目录 前言: 一.成果预览&#x…...

第五节:GLM-4v-9b模型model加载源码解读(模型相关参数方法解读)
文章目录 前言一、GLM-4v-9b模型model加载源码解读1、GLM-4v-9b模型model加载主函数源码2、GLM-4v-9b模型model加载源码源码解读3、GLM-4v-9b自定义模型类源码解读 二、基于GLM-4v-9b模型获取模型输入参数等内容源码解读(from_pretrained-->huggingface)1、from_pretrained函…...

面试经验分享 | 北京渗透测试岗位
更多大厂面试经验的视频经验分享看主页 目录: 所面试的公司:安全大厂 所在城市:北京 面试职位:渗透测试工程师 面试方式:腾讯会议线上面试线下面试 面试过程: 面试官的问题: 1、说一下XSS有哪…...

unity Toggle制作滑动开关
先上效果图 重点是这个Graphic要清空,不然显示不能直接切换,会消失 using DG.Tweening; using UnityEngine; using UnityEngine.UI;public class SwitchToggle : MonoBehaviour {public RectTransform handleRect;public float duration 0.5f;private Vector2 handlePos;To…...

全面解析 Kubernetes 流量负载均衡:iptables 与 IPVS 模式
目录 Kubernetes 中 Service 的流量负载均衡模式 1. iptables 模式 工作原理 数据路径 优点 缺点 适用场景 2. IPVS 模式 工作原理 数据路径 优点 缺点 适用场景 两种模式的对比 如何切换模式 启用 IPVS 模式 验证模式 总结 Kubernetes 中 Service 的流量负载…...

【unity】【游戏开发】Unity项目一运行就蓝屏报Watch Dog Timeout
【背景】 由于是蓝屏所以没法截屏,总之今天遇到了一开Unity,过一阵就蓝屏的情况,报Watch Dog Timeout。 【分析】 通过任务管理器查看,发现Unity占用率100%,再观察Unity内部,每次右下角出现一个Global I…...

【macos java反编译工具Java Decompiler】
mac上能用的反编译工具 https://java-decompiler.github.io/...

宠物用品电子商务系统|Java|SSM|VUE| 前后端分离
【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…...

脑肿瘤检测数据集,对9900张原始图片进行YOLO,COCO,VOC格式的标注
脑肿瘤检测数据集,对9900张原始图片进行YOLO,COCO,VOC格式的标注 数据集分割 训练组 70% 6930图片 有效集 20% 1980图片 测试集 10% 990图片 预处理 静态裁剪: 24-82&…...

Adversarial Machine Learning(对抗机器学习)
之前把机器学习(Machine Learning)的安全问题简单记录了一下,这里有深入研究了一些具体的概念,这里记录一下方便以后查阅。 Adversarial Machine Learning(对抗机器学习) Adversarial Examples 相关内容Eva…...

每日十题八股-2024年12月23日
1.MySQL如何避免重复插入数据? 2.CHAR 和 VARCHAR有什么区别? 3.Text数据类型可以无限大吗? 4.说一下外键约束 5.MySQL的关键字in和exist 6.mysql中的一些基本函数,你知道哪些? 7.SQL查询语句的执行顺序是怎么样的&…...

Android Studio新建项目在源码中编译
新建空白项目 用AS新建默认空项目,代码目录如下: MyApplication$ tree -L 4 . ├── Android.bp // bp编译脚本 ├── Android.mk.bak // mk编译脚本 ├── app // 下面目录结构是AS新建工程目录 │ ├── build.gradle │ ├── pro…...

ubuntu使用ffmpeg+ZLMediaKit搭建rtsp推流环境
最方便的方式,ubuntu上安装vlc播放器,通过vlc来推流,在网上有很多教程。这里采用ffmpegZLMediaKit 必备条件: 1、安装ffmpeg 2、安装ZLMediaKit 一、安装ffmpeg sudo apt update sudo apt install ffmpeg 二、安装ZLMediaKit…...

vue中的css深度选择器v-deep 配合!important
当 <style> 标签有 scoped 属性时,它的 CSS 只作用于当前组件中的元素,父组件的样式将不会渗透到子组件。 如果你希望 scoped 样式中的一个选择器能够作用得“更深”,例如影响子组件,你可以使用深度选择器。 ::v-deep { } 举…...

Python读写JSON文件
import jsondef writeJSONFile(self):with open(g_updateFilePath, "w" encodingutf-8) as fiel:json.dump(dictData, fiel, indent4, ensure_asciiFalse)fiel.close()def readJsonToDict(file):with open(file, r, encodingutf-8) as f: # 确保文件以 UTF-8 编码打…...

重温设计模式--外观模式
文章目录 外观模式(Facade Pattern)概述定义 外观模式UML图作用 外观模式的结构C 代码示例1C代码示例2总结 外观模式(Facade Pattern)概述 定义 外观模式是一种结构型设计模式,它为子系统中的一组接口提供了一个统一…...

云原生服务网格Istio实战
基础介绍 1、Istio的定义 Istio 是一个开源服务网格,它透明地分层到现有的分布式应用程序上。 Istio 强大的特性提供了一种统一和更有效的方式来保护、连接和监视服务。 Istio 是实现负载平衡、服务到服务身份验证和监视的路径——只需要很少或不需要更改服务代码…...

linux蓝牙模块和手机配对
在 Linux 系统下,将蓝牙模块与手机配对和连接通常涉及以下几个步骤。以下是详细的步骤和命令,帮助你实现蓝牙模块与手机的配对和连接。 1. 确认蓝牙服务已启动 首先,确保蓝牙服务已在 Linux 系统上运行。 systemctl status bluetooth如果服…...

dockerfile文档编写(1):基础命令
目录 Modelscope-agentARGFROMWORKDIRCOPYRUNENVCMD run_loopy Modelscope-agent ARG BASE_IMAGEregistry.cn-beijing.aliyuncs.com/modelscope-repo/modelscope:ubuntu22.04-cuda12.1.0-py310-torch2.1.2-tf2.14.0-1.12.0FROM $BASE_IMAGEWORKDIR /home/workspaceCOPY . /hom…...

在 Go 中利用 ffmpeg 进行视频和音频处理
在 Go 中利用 ffmpeg 进行视频和音频处理 ffmpegutil 包概述主要功能介绍1. 视频格式转换2. 提取音频3. 获取视频信息4. 创建视频缩略图5. 提取随机帧无线程版本:多线程版本: 总结 ffmpeg 是一款功能强大的多媒体处理工具,支持视频和音频的编…...