开发Windows驱动,安装到X64系统上,需要验证证书,这个时候可以有两个方法来解决。

第一个方法就是关闭Win10的强制证书认证,第二个方法就是使用makecert生成测试证书。

使用makecert生成测试证书的方法

本方法来自:https://www.csdn.net/tags/MtTaMg3sOTAyOTk5LWJsb2cO0O0O.html

注意脚本中使用的工具看看是否需要替换,这个附件中的都已经替换为X64: Windows 10.0.22621.1

脚本下载:

1.批处理脚本

make_codesign_cert.bat

@rem 生成代码签名证书
@rem August 2022-6-17
@set CUR_PATH=%~dp0

@set CERT_NAME=AugustCodeSign.cer
@set KEY_NAME=AugustCodeSign.pvk
@set PFX_NAME=AugustCodeSign.pfx
@set PASSWORD=123456
@set CERTCN_NAME=August CodeSign Root CA

@cd "%CUR_PATH%"
@%CUR_PATH%\tools\makecert.exe /n "CN=%CERTCN_NAME%" /r /eku "1.3.6.1.5.5.7.3.3,1.3.6.1.4.1.311.10.3.13" /sv "%KEY_NAME%" "%CERT_NAME%"
@%CUR_PATH%\tools\pvk2pfx.exe /pvk "%KEY_NAME%" /pi "%PASSWORD%" /spc "%CERT_NAME%" /pfx "%PFX_NAME%"
@copy /Y "%CERT_NAME%" "%CUR_PATH%\install\"

@pause

make_sign.bat

@rem 给sign目录下的文件签名
@rem ensky 2022-6-17
@set CUR_PATH=%~dp0

@set PFX_NAME=AugustCodeSign.pfx
@set PASSWORD=123456

@cd "%CUR_PATH%"
@if not exist %CUR_PATH%\%PFX_NAME% @(
    @echo "NOT found %PFX_NAME%! Use make_codesign_cert.bat to generate."
    @pause
    @exit /B 2
)

@for %%i in (%CUR_PATH%\sign\*) do @(
    @%CUR_PATH%\tools\signtool.exe sign  /fd SHA256 /v /f %PFX_NAME% /p "%PASSWORD%" %%i
    @rem %CUR_PATH%\tools\signtool.exe sign /v /f %PFX_NAME% /p "%PASSWORD%" /t http://timestamp.digicert.com %%i
    @rem 校验数字签名(需要安装自签证书到系统install_codesign_cert.bat)
    @rem %CUR_PATH%\tools\signtool.exe verify /kp /v %%i
)

@pause

install_codesign_cert.bat

@rem 安装代码签名根证书到系统
@rem August 2022-6-17
@set CUR_PATH=%~dp0

@set CERT_NAME=AugustCodeSign.cer

@cd "%CUR_PATH%"
@bcdedit  /set  testsigning  on
@%CUR_PATH%\..\tools\certmgr.exe /add "%CUR_PATH%\%CERT_NAME%" /s /r localMachine root
@rem %CUR_PATH%\..\tools\certmgr.exe /add "%CUR_PATH%\%CERT_NAME%" /s /r localMachine trustedpublisher
@set /p var="reboot?(yes/no)"
@if /i "%var%" == "yes" @(
    @shutdown /r /t 0
    @exit /B 0
)

@pause

uninstall_codesign_cert.bat

@rem 从系统删除代码签名根证书
@rem August 2022-6-17
@set CUR_PATH=%~dp0

@set CERTCN_NAME=August CodeSign Root CA

@cd "%CUR_PATH%"
@%CUR_PATH%\..\tools\certmgr -del -c -n "%CERTCN_NAME%" -s -r localMachine root 
@rem %CUR_PATH%\..\tools\certmgr -del -c -n "%CERTCN_NAME%" -s -r localMachine trustedpublisher
@bcdedit  /set  testsigning  off
@set /p var="reboot?(yes/no)"
@if /i "%var%" == "yes" @(
    @shutdown /r /t 0
    @exit /B 0
)

pause

2.生成证书

运行make_codesign_cert.bat,弹出以下界面,输入自签证书私钥文件(AugustCodeSign.pvk)的保护口令(123456)。

再次输入保护口令(123456),使用私钥签名生成的证书(AugustCodeSign.cer)。


最后会用pvk2pfx.exe将证书和私钥打包成pfx格式。

3.签名代码

将需要签名的文件(exe、dll、sys)放到sign目录中,运行make_sign.bat脚本。

安装驱动的时候,需要安装sign目录中的驱动,这个驱动已经加载了测试证书。

4.安装根证书

使用install_codesign_cert.bat脚本将生成的AugustCodeSign.cer安装到系统中,系统可正常校验通过签名的代码。

Windows10关闭证书强制认证的方法

  • 点击重启(同时按住Shift键),进入安全模式
  • 进入疑难解答
  • 进入高级选项
  • 点击“启动设置”(Startup Setting)
  • 会看到这张图,看到“禁用驱动程序强制签名“的选项
  • 然后点击重启
  • 重启以后,会看到禁用签名的界面,点击F7或者数字7禁用签名。点击以后,系统会自动重启

这个方法,每次系统重启就无效了。