如果将自签名CA根证书导入到计算机存储中,是否可以在没有测试模式的情况下在64位Windows上安装自签名驱动程序?

use*_*496 25 windows security driver ca self-signed

这是一个很好的答案,其中包括创建自签名CA,然后使用获得的证书签署可执行文件:如何在Windows上为代码签名创建自签名证书?.

我已经在网上阅读了很多关于驱动程序签名如何工作的讨论,答案似乎几乎是毫无疑问的,如果没有启用测试模式,你就无法加载未签名或自签名的驱动程序.然而,我与之相关的答案,特别是Roger Lipscombe的一个评论似乎提供了一个矛盾的观点:

如果要将其用于签名驱动程序,则需要将CA证书导入到计算机存储中.我的示例将其导入到用户存储中,这对于大多数软件来说都很好,用于测试/内部目的.

对我来说,只要将CA证书导入到机器商店,我就可以安装带有自签名证书(由自签名CA颁发)的驱动程序.我不必对系统进行任何其他更改(通过按启动菜单上的F8禁用测试模式,弄乱启动配置标志,如TESTSIGNING或NOINTEGRITYCHECKS).

我对么?当人们需要加载没有提供适当数字签名的驱动程序(例如旧的打印机驱动程序等)时,这种方法没有被广泛使用的障碍有哪些(如果有的话).相反,人们依赖于启动测试模式或第三方软件(DSEO)来篡改您的系统文件以运行此类驱动程序.

这种方法的缺点是什么?上述SO问题中描述的过程需要管理员权限,但无论如何安装驱动程序都需要它们.信任自签名CA可能存在安全风险 - 但是不会禁用所有签名检查会带来更大的安全风险吗?

use*_*650 23

不,从Windows Vista和Windows Server 2008开始,这是不可能的.

司机必须交叉签名.创建自己的CA并将其添加到计算机存储区是不够的,因为Windows信任链不会信任新创建的CA.

Windows的驱动程序签名要求

在Windows Vista和Windows Server 2008中,新功能利用了代码签名技术,操作系统中对安全性的新要求强制要求对某些类型的代码使用数字签名.

组件必须由Windows"信任"的证书签名,如本网站白皮书中所述.

其中一篇白皮书是Windows上的内核模块数字签名, 它描述了加载过程并解释了为什么自签名是不够的:

将驱动程序加载到内核内存时,Windows Vista会验证驱动程序映像文件的数字签名.根据驱动程序的类型,这可以是目录文件中的签名哈希值,也可以是图像文件本身中的嵌入式签名.签名内核驱动程序包时使用的交叉证书用于加载时签名验证; 路径中的每个证书都会检查到内核中的受信任根.加载时签名检查无权访问受信任的根证书颁发机构证书存储.相反,它必须依赖于Windows Vista内核中内置的根权限.

如前所述,这也在设备驱动程序签名和登台要求页面上列出:

64位版本的Windows 7和Windows Server 2008 R2对内核模式设备驱动程序有特殊的签名要求.如果您使用的是64位版本的Windows,则无法创建自己的签名证书.相反,您必须使用链接到批准的证书颁发机构(CA)的软件发布证书.

可以在以下页面找到用于签署内核模式驱动程序的有效CA:

内核模式代码签名的交叉证书


Bag*_*get -1

你是对的,如果你创建一个自签名证书并将其作为受信任的 CA 保存在用户存储(或机器存储)中,它将为你工​​作......但请记住:

  1. 安全启动对您不起作用。
  2. 这是一个安全漏洞,如果有人获得了证书,他们将不得不在您的系统上运行内核模式代码。

其他选择是从GoDaddy购买可信代码签名证书:)