升级 mpv 后 HTTPS 自签名证书播放被拒:--tls-verify 默认值改为 yes 怎么办?
【免费下载链接】mpv🎥 Command line media player项目地址: https://gitcode.com/GitHub_Trending/mp/mpv
升级 mpv 之后,之前能正常播放的https://流突然连不上了,日志里报 TLS 证书校验失败。原因是 mpv 的一个接口变更:--tls-verify的默认值从否改成了yes(见 DOCS/interface-changes/tls-verify-default.txt)。如果流服务端的证书是自签名证书、CA 包过期或被代理替换,新的默认行为就会在连接阶段把流拒掉。本文的目标是确认失败确实是证书校验引起的,然后按文档给出的两条路径恢复播放:按流覆盖为--tls-verify=no,或改用--tls-ca-file提供正确的 CA 数据库文件。
变更内容与适用条件
变更本身只有一行:change --tls-verify default to yes。选项手册 DOCS/man/options.rst 中该选项的定义是:
--tls-verify=<yes|no>— Verify peer certificates when using TLS (e.g. withhttps://...) (default: yes*).
注意手册把默认值写作yes*,并在同一条目末尾给出了唯一例外:
This is disabled by default, if mpv is built without libcurl and libavformat is older than 63.0.100.
也就是说,只有「构建时不带 libcurl、且 libavformat 版本低于 63.0.100」的构建默认仍为关闭校验;其余构建(带 libcurl 或 libavformat ≥ 63.0.100)升级后默认都会校验对端证书。你的构建落在哪种情况,直接决定了升级后行为是否变化。
这个选项属于网络选项,无论流由哪套网络栈处理都适用:mpv 构建带 libcurl 时,http://、https://、ftp://、ftps://由内部 libcurl 后端接管,手册明确说明该后端遵循上面列出的网络选项(含--tls-*);构建不带 libcurl 时则回落到 FFmpeg 的网络实现(DOCS/man/options.rst)。
先确认失败是证书校验问题
libcurl 网络后端在连接尚未收到任何响应就失败时,会把 curl 的错误码打印到日志,并在错误码为CURLE_PEER_FAILED_VERIFICATION或CURLE_SSL_CACERT_BADFILE时追加一段固定诊断(见 stream/stream_curl.c):
TLS certificate verification failed. This usually means an outdated CA bundle, a self-signed certificate, or a MITM proxy on your network. To bypass at your own risk, pass --tls-verify=no.日志出现上面这段文字,说明失败点就在证书校验环节。手册同时列出了同一选项对应的典型原因:CA 包过期、企业代理、以及使用自签名证书的开发服务器(DOCS/man/options.rst)。
如果手头现象不够明确,可以用 libcurl 后端的调试开关查看请求、响应头和 TLS/连接诊断信息(DOCS/man/options.rst):
mpv --msg-level=curl=trace <stream-url><stream-url>替换成你要播放的https://流地址。
恢复播放:两条路径
路径一:按流覆盖,跳过校验(最直接)
文档明确建议的用法是把它当作按流覆盖(per-stream override),只在确认有正当理由时使用:
mpv --tls-verify=no <stream-url>手册对关闭校验的警告要留意:
Disabling this option allows man-in-the-middle attacks to silently substitute the content of an HTTPS stream and is only recommended as a per-stream override when verification fails for a known-good reason (e.g. an outdated CA bundle, a corporate proxy, a development server with a self-signed certificate).
即:允许关闭校验的已知正当理由就是上面列的三类——CA 包过期、企业代理、自签名证书的开发服务器。如果不确定这个 HTTPS 流是否可信,先不要关校验,走路径二。
路径二:提供正确的 CA 数据库文件(保留校验)
如果失败原因是 CA 包过期或服务端证书链不完整,更稳妥的做法是给校验提供正确的 CA 数据库文件:
mpv --tls-ca-file=<ca-file> <stream-url><ca-file>替换成你的 CA 证书数据库文件路径。该选项的定义见 DOCS/man/options.rst,文档同时标注了一个限制:在较旧的 FFmpeg 版本上此选项会静默失效(Silently fails with older FFmpeg versions),即命令不报错但校验结果不会改变,遇到这种情况需要升级 FFmpeg 而不是反复调参数。
验证结果
两条路径的验证方式相同:重新运行对应命令,流能完成连接并开始播放,说明问题已解决。若仍失败,追加--msg-level=curl=trace复查 TLS/连接诊断输出,确认是否还有其他原因(例如企业代理改写证书、网络超时等)。
限制说明
--tls-verify=no会让中间人可以无声替换 HTTPS 流内容,文档只推荐在已知正当理由下按流使用,不要作为全局常设配置对待。--tls-ca-file在旧版 FFmpeg 上静默无效,这一点决定了它是「有条件」的修复路径。- 如果你的构建不带 libcurl 且 libavformat 低于 63.0.100,默认值本来就还是关闭校验,本文的变更不适用于该构建,升级后行为应无变化。
【免费下载链接】mpv🎥 Command line media player项目地址: https://gitcode.com/GitHub_Trending/mp/mpv
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考