如果自签名CA根证书导入机器存储,我可以在没有testing模式的64位Windows上安装自签名驱动吗?

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

我已经在网上阅读了很多关于驱动程序签名如何工作的讨论,而且似乎几乎可以毫不含糊地说,如果不启用testing模式,则无法加载未签名或自签名的驱动程序。 然而,我连接的答案,尤其是罗杰·利普斯科姆的一个评论似乎提供了一个矛盾的观点:

如果你想用这个来签署驱动程序,你需要将CA证书导入机器存储。 我的例子将它导入到用户存储中,这对于大多数软件来说是很好的,用于testing/内部目的。

对我来说,只要将CA证书导入到机器商店,就可以安装具有自签名证书(由自签名CA颁发)的驱动程序。 我不需要对系统做任何其他的改变(通过在启动菜单上按F8来禁用testing模式,搞乱引导configuration标志,如TESTSIGNING或NOINTEGRITYCHECKS)。

我对么? 当人们需要加载没有提供适当的数字签名的驱动程序(例如旧的打印机驱动程序等)时,如何避免使用这种方法的障碍是什么? 相反,人们依靠启动testing模式或第三方软件(DSEO)篡改您的系统文件来运行此类驱动程序。

这种方法有什么缺点? 在上面的问题中描述的过程需要pipe理员权限,但安装驱动程序应该无论如何都需要它们。 信任一个自签名的CA可能是一个安全风险 – 但是不会禁用所有的签名检查,甚至会有更大的安全风险?

不,从Windows Vista和Windows server 2008开始,这是不可能的。

司机必须交叉签字。 创建自己的CA并将其添加到机器商店是不够的,因为新创建的CA不会被Windows信任链信任。

Windows的驱动程序签名要求

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

组件必须由Windows“信任”的证书进行签名,如本网站上的白皮书所述

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

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

如前所述,在“ 设备驱动程序签名和登台的要求”页面中也列出了这一点:

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

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

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

您是正确的,如果您创建一个自签名证书并将其作为可信CA保存在用户存储(或machien存储)中,它将适用于您…但请记住:

  1. 安全启动将无法为您工作。
  2. 这是一个安全漏洞,如果有人拿到证书,他们将不得不在你的系统上运行内核模式代码。

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