这是一个很好的答案,其中包括创建自签名CA,然后使用获得的证书签署可执行文件:How do I create a self-signed certificate for code signing on Windows?。
我已经在网上阅读了很多关于驱动程序签名如何工作的讨论,答案似乎几乎是毫无疑问的,即如果没有启用测试模式,就无法加载未签名或自签名的驱动程序。然而,我与之相关的答案,特别是Roger Lipscombe的一个评论似乎提供了一个矛盾的观点:
如果要将其用于签名驱动程序,则需要导入CA. 证书进入机器商店。我的例子将它导入到 用户存储,适用于大多数软件,适用于测试/内部 目的。
对我来说,只要将CA证书导入到计算机商店,我就可以安装带有自签名证书的驱动程序(由自签名CA颁发)。我不必对系统进行任何其他更改(通过在启动菜单上按F8禁用测试模式,弄乱引导配置标志,如TESTSIGNING或NOINTEGRITYCHECKS)。
我说错了吗?当人们需要加载没有提供适当数字签名的驱动程序(例如旧的打印机驱动程序等)时,这种方法没有被广泛使用的障碍有哪些(如果有的话)。相反,人们依赖于启动测试模式或第三方软件(DSEO)来篡改您的系统文件以运行此类驱动程序。
这种方法的缺点是什么?上述SO问题中描述的过程需要管理员权限,但无论如何安装驱动程序都需要它们。信任自签名CA可能存在安全风险 - 但是不会禁用所有签名检查会带来更大的安全风险吗?
答案 0 :(得分:20)
不,不幸的是,从Windows Vista和Windows Server 2008开始,这是不可能的。
司机必须交叉签名。创建自己的CA并将其添加到计算机存储中是不够的,因为Windows信任链不会信任新创建的CA.
Driver Signing Requirements for Windows
在Windows Vista和Windows Server 2008中,新功能利用了代码签名技术,操作系统中对安全性的新要求强制要求对某些类型的代码使用数字签名。
组件必须使用Windows“信任”的证书进行签名,如本网站上的白皮书所述。
其中一篇白皮书是Digital Signatures for Kernel Modules on Windows ,它描述了加载过程并解释了为什么自我签名是不够的:
当驱动程序加载到内核内存时,Windows Vista会验证驱动程序映像文件的数字签名。根据驱动程序的类型,这可以是目录文件中的签名哈希值,也可以是图像文件本身中的嵌入式签名。签名内核驱动程序包时使用的交叉证书用于加载时签名验证;路径中的每个证书都会检查到内核中的受信任根。 加载时签名检查无权访问受信任的根证书颁发机构证书存储区。相反,它必须依赖于Windows Vista内核中内置的根权限。
如前所述,Requirements for Device Driver Signing and Staging页面上也列出了这一点:
64位版本的Windows 7和Windows Server 2008 R2对内核模式设备驱动程序有特殊的签名要求。 如果您使用的是64位版本的Windows,则无法创建自己的签名证书。您必须使用链接到已批准的证书颁发机构(CA)的软件发布证书。
可以在以下页面找到用于签署内核模式驱动程序的有效CA:
答案 1 :(得分:1)
Geoff Chappell对此写了一篇可靠的文章: Licensed Driver Signing in Windows 10
答案 2 :(得分:1)
只要您将证书添加到受信任的根 CA,用户模式驱动程序就可以在具有安全启动的 Windows 10 X64 以及带有自签名证书的所有内容上运行。 Kerner 模式驱动程序仅适用于付费的 MS 受信任根 CA。
答案 3 :(得分:-2)
你是对的,如果你创建一个自签名证书并将其作为可信CA保存在用户存储(或机械商店)中,它将对你有用......但请记住:
其他选项是从GoDaddy购买可信代码签名证书:)