Emby 全平台开心版、认证服务器设置方法 | Velaciela
本文由 简悦 SimpRead 转码, 原文地址 velaciela.ms
声明:我买了 emby 的正版,虽然只有一个月。
声明:我买了 emby 的正版,虽然只有一个月。
Emby 的一些问题:
Emby 作为一款不错的 Self-hosted 播放器 / 媒体服务项目,我用了一段时间。这期间也尝试过开源版本的 Jellyfin,和付费成为 emby 的会员。但是 Emby 的价格和服务让我感到不值,某些定价更让人困惑:Emby 会员一个月 $5,终身会员 $120,这个价格已经比很多大型商业软件还要昂贵了。而 Emby 却大量使用开源工具,软件 bug 也多,收这个价格实在没有道理。另外就是 Android 客户端至少可以看视频,iOS 客户端竟然要 $5 来激活,激活了也仅仅是能看视频而已,这个 iOS 的激活还不能带给服务器(服务器的激活可以带给 iOS)。如此种种,让我想到了干脆破解算了。我支持开源软件,但是开发者不能这么瞎搞。如果 iOS 客户端能看视频,但某些高级功能花钱解锁,这还说得过去。要么就一视同仁,安卓端也收费。
破解思路:
很简单,Emby 服务器、客户端都向 mb3admin.com
发送客户的 key,获取返回的会员有效期等状态。搞一个假的验证服务器。
如果你只是要随便看看视频,那不需要再往下看了:
服务器端直接用别人破解好的 docker:lovechen/embyserver 或者 xinjiawei1/emby_unlockd
配置兼容官方,只要把 image 换了,数据库等可以继承。
iOS 端使用 Surge、Shadowrocket 等软件破解,方法见这篇文章。基本常见的代理软件就能实现。
Android 端本来就不用交钱,凑合看看吧。
而我的要求是,在全平台(PC,Mac,Android,iOS,Web)和服务器实现免费使用会员功能,且不依赖于特定的软件(比如 Shadowrocket)。
所以思路就是先搭建一个自己的认证服务器,然后所有设备统一找这个认证服务器认证。
需求:
1,对 DNS 有控制权
2,有一台 http 服务器(以 nginx 为例),内外网均可。
构造认证服务器 mb3admin.com
1,建立一个 Nginx 反代服务器,如果没有 Internet 上的 VPS,可以用内网的任意一台虚拟机。当然最简单的就是和 Emby 服务器共用一台机器,使用同一个 Nginx 反代就行了。
2,在你控制的 DNS 上,把 mb3admin.com
指向这台机器的 IP。
3,nginx 新建一个反向代理,主机名字就是 mb3admin.com,具体代到哪里都无所谓(反正又不是真的代),配置文件添加以下内容:
1 | location /admin/service/registration/validateDevice { |
如果你是全容器化管理,那就用 nginx-proxy-manager,新建一个 Host,随便代理到哪里,最后在 Custom 里面输入这些内容。
先不要选择证书,先用 http 测试一遍:
http://mb3admin.com/admin/service/registration/validateDevice
如果返回:
1 | {"cacheExpirationDays": 3650,"message": "Device Valid","resultCode": "GOOD"} |
说明配置正确了。服务器返回了伪造的会员信息,剩余 3650 天。
*CORS 经过实测,仅为 iOS 设备要求,如果不需要 iOS 使用,可以不加 CORS。
配置服务器 CA、自签名证书
SSL/TLS 的规则保证了我们无法获得真正的 mb3admin.com
的证书。因此我们需要自签发一套证书,并在设备上手工添加这些证书。由于当前各类设备的安全设置,通常不允许添加自签名证书,因此我们需要添加一个私有 CA,用私有 CA 签发一套证书。
构建 CA
需要一台 linux 主机,通常情况下可以使用 emby 本身的服务器,如果是 NAS 机器可能要 进入到” 终端 “。Mac 或者微软系统需要安装 openssl 库,建议直接虚拟机安装一套 Ubuntu 一次性使用。
1 | openssl genrsa -des3 -out rootCA.key 2048 |
其中, rootCA.scr.cnf
为 CSR 配置文件,内容为:
1 | # rootCA.csr.cnf |
v3.ext 为服务器证书用途配置文件,内容为:
1 | # v3.ext |
所有东西放在同一个目录里,操作下来,得到文件
rootCA.key, rootCA.pem, mb3admin.key, mb3admin.csr, mb3admin.crt
其中 mb3admin.key, mb3admin.csr
为我们使用自己的 rootCA 制作的假的 mb3admin.com 的证书和私钥。
rootCA.pem
为 rootCA 的根证书,这里我给 rootCA 的根起名字叫”test“。
在 Nginx 中安装证书
把mb3admin.key, mb3admin.csr
添加到之前为 mb3admin.com 设置的反代里。
接下来再各个设备中安装 CA 根证书。
Windows 需要安装到受信任的根证书颁发机构
iOS 需要添加为配置文件(办法是把rootCA.pem
想办法让手机去下载,或者通过邮件附件发给手机,然后会出现添加配置文件的说明),按照说明添加配置文件,添加证书信任。
Android 同上,使用 Android 证书管理器加载证书并安装证书,信任。
安装后使用 https 协议访问刚才的 API 查询:
https://mb3admin.com/admin/service/registration/validateDevice
ping 一下服务器:
C:\Users\user>ping mb3admin.com
正在 Ping mb3admin.com [192.168.1.200] 具有 32 字节的数据:
来自 192.168.1.200 的回复: 字节 = 32 时间 < 1ms TTL=64
这说明我们已经通过虚假的 DNS 把 mb3admin.com 成功指向了虚假的服务器,并用假证书成功完成了握手。
(知道为什么一定要吊销 CNNIC 的根证书了吗?——)
验证
iOS
进入 iOS 客户端后,点击会员验证,如果不出来就关掉重新开一下 APP。
注意这个验证有效期很长,就算离开了本局域网还能用很久。如果登出会要求重新验证。
Android 同上,解锁后可以用所有功能,包括歌曲播放和歌词显示。
Win、Mac
Win 和 Mac 都要在系统里安装完证书后(Mac 安装根证书方法不赘述),打开客户端验证一遍。客户端我用的是 emby 在 github 上的安装包,不是官网的安装程序。
Web
Web 的权限,在 PC 或 Mac 等桌面环境下是跟随服务器的,服务器有会员权限,Web 就有会员权限。
Web 在 iOS 上(只要 User-Agent 为 iOS)就必须额外要会员(神经病),要么改掉 UA,要么也在同一个局域网里一起被破解掉。
注意 Web 的 Session 有时限,被退出了,会要求再要验证会员,不过反正都在这一局域网了,还怕它个啥…
服务器的破解
因为现在大多数情况都是用容器安装了,所以破解起来比较麻烦,大多数情况可以使用上面提到的两款已经破解好的容器。如果怕被删了,可以 commit 到自己的 docker 账号里哦。
如果一定要自己破解容器,先下载官方容器。
思路 1,替换掉官方的某些文件,直接指向一个假的验证服务器(都不需要证书)。
思路 2,进到容器里,添加根证书,修改 DNS,出来,commit 容器,上传保存,再开。
也可以用 bind 挂载破解文件进容器,参考这篇
这样就实现了内网中全平台的 Emby 开心版,类似于内网中的 KMS 服务器一样。设备在获取了有效期(比如 999 天或者 3650 天)后,应该不会再向服务器请求有效期,除非登出了 emby 播放服务器。除了 Web 需要保持在内网环境中,其他设备也可以在其他地方正常使用。
iOS 必须在 nginx 中加入 CORS 设定。
参考资料:
使用 Docker Compose 编排整合 emby 伪站授权
tiagofreire-pt/self-signed-certificate-with-custom-ca-for-home-assistant.md