返回知识中心
平台

Widevine 与无头浏览器:DRM 能力边界排障清单

用可复现实测矩阵区分无头显示限制、CDM 可用性、鲁棒级别和许可证决策,并记录安全回退路径。

BotBrowser Team

文档中心

想直接进入 平台 文档吗?

这篇文章属于博客内容库。若你要步骤化配置、参考说明和持续更新,请直接进入对应 docs 分区。

BotBrowser 可以在声明过的 profile 中重复已授权的 DRM 夹具,但不能提供 proprietary CDM、授予许可证,或把无头模式变成硬件安全显示。这篇文章与自动化浏览器中的 Widevine CDM 可用性不同:后者只验证第一次 EME 能力请求,这篇文章把显示、模块、鲁棒级别和许可证决策分开。

四个检查点分别表示模块协商、鲁棒级别、输出保护和许可证策略

BotBrowser 支持在受控 profile 中重复这些能力检查,但不能提供 CDM、改变许可证服务的决定或保证硬件安全输出。

要点

“无头 DRM 失败”不是一种诊断。页面可能在选择 CDM 前失败,也可能只支持软件鲁棒级别、输出路径受限,或许可证服务拒绝请求。每次运行都记录浏览器版本、profile、显示模式和供应商状态码。

目录

四个需要分别验证的边界

第一是密钥系统可用性。requestMediaKeySystemAccess() 可能在联系许可证地址前就拒绝。先使用Widevine CDM 可用性探针,并把结果标成“模块协商”,不要写成“播放成功”。

第二是鲁棒级别。默认请求成功不代表 HW_SECURE_ALL 可用;桌面或虚拟显示往往只暴露软件级别。记录实际接受的字符串,不要把它简化成是/否。

第三是输出保护。播放开始后仍可能因为显示路径不满足保护要求而变成 output-restricted。无头和有头只是测试模式,不是安全级别;应使用相同 profile 和 codec 对比。

第四是许可证策略。挑战生成后仍可能收到 HTTP 错误、账号拒绝、地区限制或过期 entitlement。日志只保存状态码和供应商错误码,不保存 license message、cookie 或 token。

可复现的矩阵

让同一个 HTTPS 夹具在每行使用一个新 profile:

行变化观察含义
A无头,默认能力请求成功或 NotSupportedError模块协商
B有头,相同 profile与 A 对比显示模式对照
C依次请求 SW_SECURE_DECODE、HW_SECURE_ALL可能一项成功、一项拒绝鲁棒级别
D用获授权的测试服务处理 challengeHTTP 状态和供应商码许可证策略
E虚拟显示/输出夹具output-restricted 或回退 UI输出保护

保存类似 {"build":"Chrome 155.0.8059.80","mode":"headless","profile":"fresh-temporary","robustness":"SW_SECURE_DECODE","access":"supported","licenseStatus":null} 的 JSON。它是实测产物,不是所有标题和主机都相同的保证。

如何读取失败

所有 key-system 都拒绝时,先比较浏览器二进制和启动参数,再查许可证服务器。软件级别成功而硬件级别失败时,应降低测试期望或记录供应商要求,不要称浏览器损坏。能力请求成功而许可证失败时,检查测试资产的 HTTP 状态、entitlement 和地区。播放后停止时,记录 keystatuseschange 和输出路径。

不要复制别的机器的 CDM,也不要为了通过测试关闭安全开关。关于 profile 一致性,参阅无头与有头浏览器 profile 一致性;关于配置边界,参阅BotBrowser Widevine DRM 设置。

BotBrowser 能控制什么

当构建和 entitlement 支持时,BotBrowser 可以让声明的 profile 与每上下文的 --bot-widevine 策略保持一致。策略可以用来测试正常 challenge、阻止 challenge 或 no-CDM 回退,但不能制造 CDM、改变供应商账号决定、保证硬件安全,也不能保证每台主机都能播放受保护标题。

结论

无头只是显示模式。把可用性、鲁棒级别、输出保护和许可证策略拆成四行矩阵,DRM 排障才可行动。浏览器、框架、profile 或显示环境变化后重跑夹具,并保留实测结果。

来源

#Widevine#DRM#无头浏览器#浏览器自动化#隐私

让 BotBrowser 从研究走向生产

先用这些指南理解模型,再进入跨平台验证、隔离上下文和面向规模化的浏览器部署。