由于自2021年微软宣布弃用SHA-1算法的代码签名,而采用新的SHA-2算法代码签名。SHA-1 签名内容要停用 | Microsoft Docs
同时代码签名证书颁发厂商也不再颁发SHA-1的证书。但由于部分Windows7系统(未开启自动升级),并不支持SHA-2代码签名机制(可安装系统补丁来解决此问题),使得使用SHA2证书签名的文件并不能通过Windows的校验机制,从而程序无法正常运行。
另外针对内核代码,需要双证书签名,使用SHA-2证书和微软同时签名。开发者使用SHA-2证书签名内核后,还需要将签名后的驱动提交到Windows 硬件开发者中心,获取Windows的数字签名后驱动才能正常运行。
为了降低程序测试阶段,频繁发布导致的数字签名,可以使用makecert生成自签的代码签名证书。
为了方便使用,本人将生成自签代码证书、签名代码、安装/卸载根证书分别集成为批处理脚本。
1.批处理脚本
make_codesign_cert.bat
@rem 生成代码签名证书
@rem August 2021-5-25
@set CUR_PATH=%~dp0
@set CERT_NAME=AugustCodeSign.cer
@set KEY_NAME=AugustCodeSign.pvk
@set PFX_NAME=AugustCodeSign.pfx
@set PASSWORD=123456789
@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 August 2021-5-25
@set CUR_PATH=%~dp0
@set PFX_NAME=AugustCodeSign.pfx
@set PASSWORD=123456789
@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 /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 2021-5-25
@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
2.生成证书
运行make_codesign_cert.bat,弹出以下界面,输入自签证书私钥文件(AugustCodeSign.pvk)的保护口令,
再次输入保护口令,使用私钥签名生成的证书(AugustCodeSign.cer)。
最后会用pvk2pfx.exe将证书和私钥打包成pfx格式。
3.签名代码
将需要签名的文件(exe、dll、sys)放到sign目录中,运行make_sign.bat脚本。
4.安装根证书
使用install_codesign_cert.bat脚本将生成的AugustCodeSign.cer安装到系统中,系统可正常校验通过签名的代码。
脚本和工具包下载地址:CodeSignCertUtil.zip-其它文档类资源-CSDN下载