jsDelivr 备案被吊销后,网页静态资源何去何从

882275626fe17af0ce874e39302e0d25.gif

2021 年 12 月 20 日,jsDelivr[1] 团队主要负责人 Dmitriy Akulov 在 jsDelivr 官方 GitHub 仓库[2]的一条 issue 下发表了以下说明[3]

6588b72f6b09eee30f34ed7423f11175.png

是的,那天 jsDelivr 在国内的故障,并不是偶发的 SSL 证书出现问题导致资源下线,而是域名备案被吊销,导致国内 CDN 提供商网宿[4]移除了 jsDelivr 的账号。目前 jsDelivr 国内线路为 Fastly[5]

647e2c4483d1cd37963b5db539c7cb82.png

过去的一两年里,许多人发现了 jsDelivr 在速度上的巨大优势,开始用 jsDelivr 作为图床,甚至用 jsDelivr 来托管和魔法软件的安装脚本。到后来 jsDelivr 更新了它的可接受使用政策(AUP)[6],可惜当然滥用服务的各路神仙是不会理睬的,在他们的眼里,撸是常态,薅羊毛是理所当然,既然是免费的就要做好被撸爆的准备。

所以,2021 1220 - 可喜可贺的一天,jsDelivr 的 ICP 没了。最少在短时间内,jsDelivr 是无法也不会提供基于国内节点的托管服务了。可以想象,也是可能的下一步,就是 jsDelivr 完全被 GFW 阻断,成为连 Google Hosted Libraries[7] 和 cdnjs[8] 都不如的开源 CDN - 最少这两个国内还极其勉强地能用。

在这里,我强烈谴责无底线滥用 jsDelivr 的人们

Disclaimer

文章发出后引起了一部分的关注。请注意本文,以及本文所提及的谴责,是因为有人用 jsDelivr 来托管魔法脚本的事情 - 在国内网络上这很显然是不可行的,raw.githubsuercontent.comgist.github.com 都因此被封锁,而在一个唯一提供国内网络加速的开源 CDN 上托管这些很明显会导致站点被封禁的脚本,无疑是极其不负责任,不顾后果的行为。

诚然,我们的系统的的确确有问题,但是这并不能成为滥用一切可以滥用的以试图绕过限制(并且还无法改变根本事实)的理由。

也可能会有人说,啊我就是自由战士,我就是要和体制对抗到底,jsDelivr 牺牲了就牺牲了,都是他们的问题!

请注意,绝大部分用 jsDelivr 来托管脚本的人们,只是贪图一时的便利,他们可能觉得 jsDelivr 封不了(但是现在 ICP 没了),而没有考虑到可能的后果。更遑论那些直接用来做图床,文件下载的,就是本着滥用到底的想法。

本文只是一个菜鸡 Web Developer 对于这些人的行为导致 jsDelivr 没有了中国线路的愤慨和不满而已,确实 jsDelivr 不该这么用(你看到 cdnjs 能被这么用吗),只是一个没有审核机制,人人可托管内容的服务,最后竟然成了它的漏洞。

怎么办呢

凉拌呗。

目前能找到的最好的 jsDelivr 代替就是 cdn.baomitu.com[9],由 360 的网络基建背书(放心,没有隐私风险,也不会给你静默安装 360),海外接入了 CloudFront[10],全球速度极其优秀。完全镜像 cdnjs。只是无法用版本别名(如 unpkg.com/jquery@3),也不支持加速不在 cdnjs 上的项目(i.e. 自有项目)。

当然也是没办法合并文件的。jsDelivr 仅此一家,没了就是没了

字节跳动静态资源公共库(cdn.bytedance.com[11])也是一个理想的替代,只不过他的更新频率很不频繁,jQuery 到现在都只停留在 3.5.1 的版本号上(最新版本是 v3.6.0)。如果要使用的话记得替代他提供的域名到 s1.pstatp.com(网宿 CDN,全球加速)或者 s2.pstatp.com (阿里云 CDN,全球加速)。

其他的 BootCDN,Staticfiles 之类的维护比较混乱,不推荐使用。

自有资源怎么办呢

自己写了 js/css,但是显然不够格上 cdnjs,所以也没办法从上面的渠道调用,jsDelivr 又没了国内节点,怎么办呢?

是有办法的,虽然不完美,但是我是不会在这里说的。

所以要么自己托管,要么自己想办法。

写在最后

从第一次用 jsDelivr 以来,起码已经有三年时间了吧。也有常常关注这个项目,也和 Dmitriy 邮件交流过几次,了解过一些这个项目的进展。

这是一个非常好非常好的项目,也对国内的网页开发者们助力非常大,ICP 没了十分可惜,但也于事无补。

下一步我会尝试和 Dmitriy 沟通,提供一些我的想法,希望能够让 jsDelivr 在国内重现天日。

最后再次谴责无底线滥用 jsDelivr 的人们。

0c41b8b1ed4414101d077ab7a034720a.png

再也不是一片绿了

引用链接

[1]

jsDelivr: https://www.jsdelivr.com/

[2]

GitHub 仓库: https://github.com/jsdelivr/jsdelivr

[3]

说明: https://github.com/jsdelivr/jsdelivr/issues/18348#issuecomment-997777996

[4]

网宿: https://www.wangsu.com/

[5]

Fastly: https://fastly.com/

[6]

可接受使用政策(AUP): https://www.jsdelivr.com/terms/acceptable-use-policy-jsdelivr-net

[7]

Google Hosted Libraries: https://developers.google.com/speed/libraries

[8]

cdnjs: https://cdnjs.com/

[9]

cdn.baomitu.com: https://cdn.baomitu.com/

[10]

CloudFront: https://aws.amazon.com/cloudfront/

[11]

cdn.bytedance.com: https://cdn.bytedance.com/

原文链接:https://huangxin.dev/partly-technical/in-response-to-jsdelivr-icp-license-revokement

246fb2d34a2b0b740af8a613eb4cddf3.gif

76c406f082cd69e665c7c9ece51e488e.png

你可能还喜欢

点击下方图片即可阅读

9e732093981b8e47c117e029b468c6df.png

解决 Grafana Node_exporter 网卡流量监控不准确

5fa659ed0628ba884d57029b40568934.gif

云原生是一种信仰 🤘

关注公众号

后台回复◉k8s◉获取史上最方便快捷的 Kubernetes 高可用部署工具,只需一条命令,连 ssh 都不需要!

8d838a15b359690bf781934e5e217aa2.gif

1ec7893c7d1bae392adf94bb15e77eac.gif

点击 "阅读原文" 获取更好的阅读体验!

发现朋友圈变“安静”了吗?

61181d97876608f897468d005bb70098.gif

<think>我们正在处理的问题:在将电脑系统安装为Ubuntu时,检测到被吊销的UEFI引导加载器(revoked UEFI boot loader)的解决方案。 根据引用[1]:现代电脑采用UEFI安全启动,会验证引导程序的签名是否由信任的公钥对应的私钥生成。如果引导加载器的签名被吊销(比如因为发现安全漏洞),那么UEFI固件将拒绝启动它。 引用[2]提到:引导加载器在引导过程的早期执行,保护它非常重要。我们可以通过设置密码和启用验证启动来增强安全性。 引用[3]提到了一些内核参数,但这里的问题与引导加载器被吊销有关,而不是内核。 因此,解决这个问题的关键在于处理UEFI安全启动(Secure Boot)对引导加载器的签名验证。 解决方案可能包括: 1. 禁用Secure Boot(最简单,但可能降低安全性) 2. 更新UEFI固件(BIOS)到最新版本,以获取最新的吊销列表和信任的签名。 3. 使用一个被信任的引导加载器(如使用Ubuntu官方提供的经过签名的引导加载器,并确保其未被吊销) 4. 手动导入MOK(Machine Owner Key)来签名引导加载器(如果Ubuntu的引导加载器未被UEFI固件信任,但用户信任它) 具体步骤: 步骤1:检查Secure Boot状态 在安装Ubuntu之前,我们可以进入BIOS/UEFI设置界面,查看Secure Boot的状态。如果Secure Boot是启用的,并且出现了引导加载器被吊销的错误,那么我们可以尝试禁用Secure Boot。 步骤2:禁用Secure Boot(临时解决方案) 重启电脑,进入UEFI设置(通常按F2、Del或F12等键),找到Secure Boot选项,将其设置为Disabled。然后保存退出,重新尝试安装Ubuntu。 步骤3:更新UEFI固件 访问电脑制造商的官方网站,下载最新的BIOS/UEFI固件并更新。新的固件可能包含了更新的吊销列表和信任的签名,可能已经将当前Ubuntu版本的引导加载器签名加入了信任列表。 步骤4:使用Ubuntu官方支持的安全启动 在安装Ubuntu时,它会自动检测Secure Boot并尝试安装签名的引导加载器(如shim和grub)。如果安装过程中出现吊销错误,可能是因为当前固件的吊销列表(dbx)已经将该版本的引导加载器签名列入黑名单。此时,我们可以尝试以下方法: - 在安装前,确保下载的Ubuntu镜像是最新的(可能已经更新了签名) - 在安装过程中,如果出现Secure Boot相关的警告,按照提示操作,可能需要输入一个临时密码,然后重启后会要求导入MOK(Machine Owner Key)。具体步骤如下: 1. 在安装过程中,如果提示引导加载器签名问题,选择继续安装(可能会提示你设置一个密码,用于后续导入MOK)。 2. 安装完成后重启,系统会进入一个蓝色背景的界面(MOK管理界面),提示你导入密钥。 3. 按照提示选择“Enroll MOK” -> “Continue” -> 输入之前设置的密码 -> 确认导入。 4. 导入成功后,系统应该可以正常启动。 步骤5:手动更新吊销列表(dbx) 如果上述方法都不行,可能需要手动更新dbx(吊销列表)。但是,这通常需要从UEFI固件更新中获取,或者使用Linux中的工具(如fwupd)来更新。在Ubuntu中,可以尝试: sudo apt install fwupd sudo fwupdmgr update 这个命令会更新固件和UEFI的密钥数据库(包括dbx)。 步骤6:手动移除吊销列表(不推荐,有安全风险) 在极端情况下,如果无法启动且没有其他办法,可以考虑清除UEFI的吊销列表(dbx)。但这会降低安全性,因为系统将不会检查任何被吊销的签名。可以使用以下命令(在Ubuntu LiveCD中): sudo mokutil --disable-validation 或者更彻底的方法是清除平台密钥(PK)和所有密钥,然后重新设置安全启动。但这个过程非常复杂,并且可能导致系统无法启动其他操作系统,因此不推荐普通用户操作。 总结: 首选尝试更新UEFI固件和Ubuntu安装镜像,其次是在安装过程中按照提示导入MOK,最后再考虑禁用Secure Boot。 注意:禁用Secure Boot可能会影响某些硬件的使用(例如某些显卡驱动),以及降低系统安全性。 根据引用[2],我们还可以设置Grub密码来防止本地攻击,但这与解决吊销问题没有直接关系。 因此,针对用户的问题,我们给出以下步骤: 1. 更新UEFI固件(BIOS)到最新版本。 2. 使用最新版本的Ubuntu镜像(如22.04 LTS)重新制作启动U盘。 3. 在安装过程中,如果遇到吊销错误,尝试在UEFI设置中禁用Secure Boot(安装完成后再重新启用,并导入MOK)。 4. 或者,在安装过程中按照提示设置MOK密码,并在重启后导入MOK。 详细步骤: 方法A:禁用Secure Boot(临时) - 重启电脑,进入UEFI设置(开机时按F2/Del/F10等,具体取决于主板)。 - 找到Secure Boot选项,设置为Disabled。 - 保存退出,然后从Ubuntu安装U盘启动并安装。 - 安装完成后,可以重新启用Secure Boot,但可能需要导入MOK(方法见下)。 方法B:在启用Secure Boot的情况下安装并导入MOK - 保持Secure Boot启用。 - 从Ubuntu安装U盘启动,选择“试用Ubuntu”或直接安装。 - 在安装过程中,如果出现关于安全启动的警告,它会提示你设置一个密码(用于保护MOK的导入)。 - 记住这个密码(长度8-16位),继续完成安装。 - 重启时,系统会进入一个蓝屏的MOK管理界面(部分电脑可能是黑屏白字)。 * 选择“Enroll MOK” -> “Continue” -> “Yes” -> 输入之前设置的密码 -> 按回车确认。 * 然后选择“Reboot”。 - 系统应该能正常启动。 如果安装过程中没有提示设置MOK密码,但启动时遇到签名问题,可以在安装完成后在LiveCD环境或已安装的系统中(如果还能进入)尝试以下命令: sudo mokutil --import /path/to/shim.der # 通常不需要手动导入,因为安装程序会自动处理 但是,通常情况下,Ubuntu安装程序会自动处理这些步骤。 如果以上方法都不行,考虑使用Ubuntu的第三方签名版本(如使用PreLoader)或者完全禁用Secure Boot。 最后,为了确保安全,建议启用Secure Boot并成功导入MOK,这样系统既能保证安全又能正常启动。 相关问题: 1. 如何在Ubuntu中管理安全启动(Secure Boot)? 2. 如何更新UEFI固件的吊销列表(dbx)? 3. 如何为Grub引导加载器设置密码? 4. 如何手动签名一个内核模块以在安全启动下加载? </think>### 解决 Ubuntu 安装中 "被吊销的 UEFI 引导加载器" 问题 当在启用安全启动(Secure Boot)的电脑上安装 Ubuntu 时,若检测到 **被吊销的 UEFI 引导加载器**(revoked UEFI boot loader),通常是由于 UEFI 固件的吊销列表(dbx)包含当前引导加载器的签名密钥。以下是系统性的解决方案: --- #### **一、问题原因分析** 1. **UEFI 安全启动机制** UEFI 固件内置信任公钥列表(如微软、Ubuntu 的公钥),并在引导阶段验证签名[^1]。 - 若引导加载器签名被吊销(如发现安全漏洞),UEFI 会拒绝启动 - Ubuntu 的 `shim` 引导加载器可能被特定硬件厂商列入吊销列表 2. **风险提示** ```markdown - 继续使用被吊销的引导加载器可能导致系统无法启动 - 禁用安全启动虽可临时解决,但会降低安全性[^2] ``` --- #### **二、解决方案** ##### 方案 1:更新 UEFI 吊销列表(推荐) 1. **下载最新 dbx 更新** Ubuntu 官方提供吊销列表更新工具: ```bash sudo apt install fwupd sudo fwupdmgr update # 自动下载并应用最新吊销列表 ``` 2. **手动更新 dbx** 若自动更新失败: ```bash wget https://uefi.org/revocationlistfile sudo cp revocationlistfile /sys/firmware/efi/efivars/dbx-<GUID> ``` > 需替换 `<GUID>` 为硬件对应的全局标识符(通过 `ls /sys/firmware/efi/efivars/dbx*` 查看) ##### 方案 2:重新签名引导加载器 1. **创建 Machine Owner Key (MOK)** ```bash sudo apt install mokutil # 安装密钥管理工具 openssl req -new -x509 -newkey rsa:2048 -keyout MOK.key -out MOK.crt -nodes -days 3650 ``` 2. **导入自定义密钥** ```bash sudo mokutil --import MOK.crt # 设置导入密码 sudo reboot # 重启进入 MOK 管理界面 ``` - 在蓝色 MOK 界面选择 **Enroll Key** → 输入密码 → 确认导入 3. **重新签名引导加载器** ```bash sudo sbsign --key MOK.key --cert MOK.crt --output /boot/efi/EFI/ubuntu/shimx64.efi /boot/efi/EFI/ubuntu/shimx64.efi ``` ##### 方案 3:临时绕过(仅用于安装) 1. **安装时禁用模块签名强制** 在 GRUB 引导界面按 `e` 键编辑启动参数,添加: ``` module.sig_enforce=0 # 关闭内核模块签名强制验证[^3] ``` ![GRUB 编辑界面](https://help.ubuntu.com/grub.png) > *按 Ctrl+X 启动,安装完成后需永久修复* 2. **安装后修复** ```bash sudo nano /etc/default/grub ``` 修改为: ```conf GRUB_CMDLINE_LINUX_DEFAULT="module.sig_enforce=0" ``` 更新 GRUB: ```bash sudo update-grub ``` --- #### **三、预防措施** 1. **启用安全启动兼容模式** ```bash sudo apt install shim-signed # 确保安装 Ubuntu 官方签名版本 ``` 2. **定期检查吊销状态** ```bash sudo mokutil --list-enrolled # 查看已注册密钥 sudo mokutil --list-revoked # 查看吊销列表 ``` 3. **硬件兼容性检查** ```markdown - 查询硬件厂商的 UEFI 兼容列表 - 避免使用非官方修改的 Ubuntu 镜像 ``` > ⚠️ **关键提示** > 若上述方法失效: > 1. 更新 UEFI 固件至最新版本 > 2. 在 BIOS 中关闭 **Secure Boot**(临时方案) > 3. 使用 Ubuntu LTS 版本(兼容性更好) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值