Como eu assino digitalmente um driver do modo kernel de 64 bits?

4

Eu tenho um driver em modo kernel e tenho que instalá-lo em um win 7. de 64 bits. Ele precisa ser assinado digitalmente. Eu assinei digitalmente usando o dseo13b.exe. Mas quando eu carregar o driver eu recebo um erro no log de eventos do sistema dizendo

The driver failed to start due to the following error: Windows cannot verify the digital signature for this file. A recent hardware or software change might have installed a file that is signed incorrectly or damaged, or that might be malicious software from an unknown source.

Eu não quero usar o modo de assinatura de teste. Como resolvo isso? Preciso obter certificado da Microsoft?

Eu desenvolvi o driver e agora o faço funcionar na máquina de 64 bits.

Minha empresa pode comprar o certificado da verisign, mas o que eu faço depois de adquirir um certificado. Como faço para vincular o arquivo do driver com o certificado que recebo? E também como faço para vincular o certificado cruzado baixado da internet com o certificado que recebo da verisign? Eu li o doc KMSC_WalkThru (Como Liberar-Assinar um Módulo de Kernel), mas essas coisas não ficaram claras a partir disso. Você pode por favor ajudar.

Além disso, como obtenho o seguinte:

mySPCfile.spc   Your public key certificate file. 
myPVKfile.pvk   Your private key certificate file. 
myPVKpassword   

A senha do arquivo de certificado da chave privada. Mencionado em aqui

    
por Neha 26.08.2011 / 08:30

1 resposta

7

Sim, você precisa adquirir um certificado de uma autoridade de certificação confiável. Se alguém pudesse fazer um certificado, haveria inúmeros certificados alegando ser "Microsoft Corporation" e seria o céu do vírus.

Esse documento que você mencionou é o que eu usei para aprender a assinar drivers. Eu recomendo que você reserve alguns dias e corra até o início. Passei boa parte da semana passando por isso.

Tudo o que posso oferecer além disso é o seguinte arquivo em lote que eu executo do VS2010 no pós-build. Ele usa um certificado do armazenamento de certificados do computador, não um arquivo. A razão pela qual é tão complexo é usá-lo em muitas circunstâncias diferentes para muitos projetos diferentes.

Sign.bat

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 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:\WinDDK00.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:\WinDDK00.16385.1\bin\x86\SignTool.exe Verify /pa %FileList%
    
por 26.08.2011 / 09:08