![如何对 64 位内核模式驱动程序进行数字签名?](https://linux22.com/image/1287483/%E5%A6%82%E4%BD%95%E5%AF%B9%2064%20%E4%BD%8D%E5%86%85%E6%A0%B8%E6%A8%A1%E5%BC%8F%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%E8%BF%9B%E8%A1%8C%E6%95%B0%E5%AD%97%E7%AD%BE%E5%90%8D%EF%BC%9F.png)
我有一个内核模式驱动程序,我必须在 64 位 Win7 上安装它。它需要数字签名。我使用 dseo13b.exe 对其进行了数字签名。但是当我加载驱动程序时,系统事件日志中出现错误,提示
由于以下错误,驱动程序无法启动:Windows 无法验证此文件的数字签名。最近的硬件或软件更改可能安装了签名不正确或已损坏的文件,或者可能是来自未知来源的恶意软件。
我不想使用测试签名模式。我该如何解决这个问题?我需要从 Microsoft 获取证书吗?
我已经开发了驱动程序并正在使其在 64 位机器上运行。
我的公司可能会从 verisign 购买证书,但是获得证书后我该怎么做呢?如何将驱动程序文件与我获得的证书链接起来?此外,如何将从互联网上下载的交叉证书与我从 verisign 获得的证书链接起来?我阅读了文档 KMSC_WalkThru(如何发布签名内核模块),但这些内容并不清楚。你能帮忙吗?
另外我如何获得以下内容:
mySPCfile.spc Your public key certificate file.
myPVKfile.pvk Your private key certificate file.
myPVKpassword
私钥证书文件的密码。在这里
答案1
是的,您需要从受信任的证书颁发机构购买证书。如果任何人都可以制作证书,那么就会有无数证书声称是“Microsoft Corporation”,这将成为病毒的天堂。
您提到的那个文档是我用来学习如何签署驱动程序的。我强烈建议您留出几天时间,从头到尾浏览一遍。我花了一周的大部分时间来浏览它。
除此之外,我所能提供的只是以下批处理文件,该文件是我在构建后从 VS2010 执行的。它使用来自计算机证书存储的证书,而不是文件。它如此复杂的原因是我在许多不同情况下为许多不同的项目使用它。
签名程序
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Signs the project output.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Usage
::
:: Post-build event command line:
:: Call "$(ProjectDir)..\..\Sign.bat" "$(ConfigurationName)" "$(TargetPath)"
::
:: Run the post-build event:
:: When the build updates the project output
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Input Parameters
::
:: %~1 $(ConfigurationName) The file's configuration. This function will
:: use a different certificate for "Debug"
:: configurations.
:: %~2 $(TargetPath) The full path of the first file to sign.
:: %~3+ FileName The names of the remaining files to sign.
:: These files must reside in the same directory
:: as %2.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Validate the parameters.
If "%~1"=="Debug" Exit /B 0
If "%~1"=="" Goto Error
If "%~2"=="" Goto Error
Goto Valid
:Error
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Report that the syntax is incorrect.
Echo One or more parameters are missing.
Echo.
Echo %~nx0 configuration filename1 [filename2 ...]
Echo.
Echo configuration The project configuration. Usually "Debug" or "Release".
Echo filename1 The full path of the first file to sign.
Echo filename2 The names of addition files to sign. These files must
Echo reside in the same folder as "filename1".
Echo.
Exit /B 1
:Valid
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Change to the assembly's folder.
%~d2
CD %~dp2
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Prepare the list of files to sign.
Set FileList=
:CreateFileList
Set FileList=%FileList% %~snx2
Shift /2
If Not "%~2"=="" Goto CreateFileList
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Sign the assembly files.
Set Store=my
Set Certificate=type the name of your certificate here
Set TimeStampUrl=http://timestamp.verisign.com/scripts/timestamp.dll
C:\WinDDK\7600.16385.1\bin\x86\SignTool.exe Sign /s "%Store%" /n "%Certificate%" /t "%TimeStampUrl%" %FileList%
If %ErrorLevel%==1 Exit /B 1
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Verify the digital signature is valid.
C:\WinDDK\7600.16385.1\bin\x86\SignTool.exe Verify /pa %FileList%