软件安装中的数字证书(签名)验证

软件安装中的数字证书(签名)验证

我需要知道操作系统安装软件时数字证书(签名)验证过程中究竟发生了什么。我知道这是一个非对称密钥过程,并且我对私钥/公钥加密过程有实际了解。

我在互联网上进行了一些搜索,找到了一些文档,但似乎无法找到以下问题的答案(可能其中一些不是那么智能)。

  • 当安装软件时,谁(代表操作系统)从软件发布者处获取公钥(数字签名)?这里联系谁?另一端有守护进程吗?或者有存储库?
  • 如果我没有连接到互联网怎么办?在这种情况下验证过程将如何进行?
  • 如果某个软件被冒用知名软件公司的名称签名,而我尝试安装该软件,我会联系哪个 CA(证书颁发机构)来保护我?这个过程是自动的还是我(安装程序)需要执行一些手动过程?
  • 软件供应商的公钥在安装后是否存储在本地?在哪里?我可以查看这些吗?
  • 我的浏览器在软件签名验证过程中是否发挥任何作用?或者浏览器只关心网站https

请使您的答案通用(与操作系统无关)。如果您需要提及某些特定软件,我的偏好顺序是 Ubuntu 和 Windows 中的软件,按此顺序。

答案1

这在很大程度上取决于操作系统,因此没有通用的答案。

在 Arch Linux 中软件包使用 PGP 进行签名 – 不是由原作者(仅提供源代码)签名,而是由包装者(将源代码编译成程序并创建签名包)。

签名与软件包的其他信息一起保存在软件包数据库中。(对于第三方软件包 - 当您只下载文件时.pkg.tar.xz- 签名将位于第二个文件中。)数据库本身可以签名,但通常不会签名。.pkg.tar.xz.sig

pacmanArch Linux 会根据 中的密钥验证签名/etc/pacman/gnupg.d(使用 进行管理pacman-key);如果你还没有签名者的密钥,它会要求从密钥服务器。没有中央“证书颁发机构”——PGP 使用信任网络算法,某人密钥的有效性取决于其他人对该密钥的签名。(例如,所有官方开发人员的密钥都由五个“主密钥”签名,主密钥被标记为“受信任”,因此所有开发人员的密钥也受到包管理器的信任。这些密钥默认安装在所有 Arch 系统的包中archlinux-keyring。)

在 PGP 中,由于没有 CA,因此密钥只能由其所有者撤销。要了解新签名或撤销情况,您必须定期从密钥服务器更新缓存的密钥;gpg --refresh-keys对您自己的密钥环执行此操作,同时pacman-key --refresh-keys更新用于验证软件包的密钥环。

在 Ubuntu 中,PGP 也被使用,但略有不同。软件包本身几乎从未签名,它们仅根据软件包数据库中的哈希值进行验证,该数据库由自动化流程签名(使用名为“Debian 存档自动签名密钥”或“Launchpad PPA for John Smith”或类似名称的密钥)。

签名也会根据本地密钥环进行验证(/etc/apt/trusted.gpg,使用 进行维护apt-key)——但与 Arch 不同的是,Ubuntu 包管理器会忽略密钥签名并信任全部该密钥环中的密钥,因此它永远不会自动下载密钥,也永远不需要刷新它们。官方密钥预装在各种foo-keyring软件包中(debian-keyring和类似软件包),如果其中一个密钥被撤销,更新的软件包会将其删除。

在 Windows 上程序可以使用“Authenticode”进行签名,它基本上是用于代码签名的 X.509。签名以及签名者自己的证书都嵌入在程序.exe文件中。(必须附加证书,因为与 PGP 不同,X.509 没有密钥服务器,尽管 X.500 曾经有过最初的计划。)与Linux不同,大多数Windows程序都是由其作者以编译形式分发的,因此.exe文件由作者直接签名。

发布者的证书将根据受信任的证书颁发机构的本地数据库进行验证。在 Windows 上,您可以看到它certmgr.msc- 所包含的证书由 Microsoft 根据 CA 的请求决定。(注意:据说 Windows 7 能够在需要时下载所需的 CA 证书,因此证书管理器中的列表可能不完整。)

在验证签名时,Windows 将联系颁发者的 OCSP 服务器,以检查证书是否尚未被吊销。(OCSP 服务器地址通常是发布者证书的一部分。)换句话说,吊销由最初颁发证书的同一 CA 处理。(注意:我不确定 OCSP 检查是否默认启用。有一个选项可以启用/禁用它控制面板 → Internet → 高级 → 安全。)在某些情况下,微软还会将已知的假证书标记为“不受信任”,并以与 CA 列表定期更新相同的方式分发它们。certmgr.msc您可以看到多个证书已通过这种方式被撤销。

某些浏览器(例如 Opera 或 Firefox)有自己的 CA 证书数据库。Windows 不使用它们。而 Internet Explorer 和 Google Chrome 使用相同的 Windows 数据库。

相关内容