分享免费的编程资源和教程

网站首页 > 技术教程 正文

Mozilla代码签名的20年发展历程:从手工操作到自动化与安全升级

goqiw 2025-02-11 11:52:29 技术教程 43 ℃ 0 评论

代码签名是确保软件安全分发的重要环节,而Mozilla在这方面的探索和改进已经持续了20年。从手工操作到自动化、从单一平台到跨平台、从低效到高效,再到如今的高度安全和现代化,Mozilla的代码签名历程堪称软件安全领域的一个缩影

早期手工签名:繁琐且易出错

  • GPG与Authenticode签名:早在Firefox 1.0时代,Mozilla就开始使用GPG签名和Authenticode签名技术。当时,签名过程需要在一台Windows机器上完成,且需要工程师亲自到场插入USB密钥。整个过程不仅繁琐,还容易因人为操作失误而失败。
  • 内部文件签名:早期的签名仅覆盖Firefox安装程序本身,而安装程序内的EXE和DLL文件并未签名。后来,Mozilla开始对这些内部文件进行签名,但具体细节已难以追溯。

自动化与性能提升

  • 脚本自动化:为减少人为错误,Mozilla引入了Makefile,通过简单的输入即可完成下载、签名和上传的流程。这一改进显著提高了签名效率。
  • 签名加速:2009年,Chris AtLee的改进将签名时间从8小时缩短至15分钟以内。通过硬件升级、并行签名、压缩/解压缩优化和缓存改进,签名过程变得更加高效。
  • 自动签名:为解决工程师不在场时无法及时签名的问题,Mozilla开发了“autosign”功能,允许提前启动签名脚本,自动检测文件是否准备好并开始签名。

跨平台签名与架构改进

  • Linux下的Windows签名:2011年,Mozilla将签名流程迁移到一个高度安全的Linux服务器上,并通过API实现签名。借助Mono项目的Linux版signcode工具,成功实现了在Linux环境下对Windows二进制文件的签名。
  • MAR文件签名:随后,Mozilla开始对MAR(Mozilla Archive)更新包进行签名,利用已有的签名架构轻松实现了这一功能。
  • macOS签名:macOS的.app签名工作始于2007年,但直到2012年才最终实现。由于当时缺乏跨平台签名工具,Mozilla不得不在macOS服务器上运行签名服务。

现代化签名与安全增强

  • Taskcluster与签名脚本:2018年,Mozilla将其CI和发布自动化从Buildbot迁移到Taskcluster,并引入了“signingscript”和“iscript”专用工作程序,分别用于非macOS和macOS构建的签名。同时,引入了“信任链”机制,确保只有经过验证的构建才能被签名。
  • Autograph服务:Autograph是Mozilla的现代代码签名服务,于2019年全面投入使用。它支持将私钥存储在硬件安全模块(HSM)中,显著提升了安全性。此外,Autograph通过仅传输文件哈希进行签名,大幅减少了网络流量。
  • macOS公证与rcodesign:2023年,Mozilla开始使用rcodesign工具对macOS构建进行公证和钉装,将部分操作迁移到云端,减少了对mac硬件的依赖。

关键工具与技术

  • osslsigncode:用于签名PE文件,并支持将Autograph生成的签名附加到文件中。
  • winsign:一个Python库,用于签名和操作Authenticode签名,支持直接使用私钥签名或调用外部函数(如Autograph)进行签名。
  • apple-codesign:由Gregory Szorc开发的第三方工具,可在Linux上对macOS的.app、.pkg和.dmg文件进行签名、公证和钉装。
  • mardor:用于管理MAR文件并注入Autograph生成的签名。
  • signingscript与iscript:分别用于非macOS和macOS构建的签名,与Autograph配合完成签名任务。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表