Первым делом стоит определиться зачем кому-то может понадобиться подписывать какие-то файлы сертификатом. В общем смысле, в целях безопасности. Если же привести конкретные примеры, то например для подписания своего драйвера, ведь не подписанные драйвера блокируются в x64 системах начиная с Windows 7. Или же для того что бы добавить файл по сертификату в Whitelist антивируса, что бы не было ложных срабатываний.
Далее давайте детально разберем алгоритм подписания файлов.
- Для получения signtool.exe качаем Windows Software Development Kit (SDK) и производим нехитрую установку:
- После установки находим утилиту по пути C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin
- На сервере экспортируем сертификат через менеджер сертификатов. Используем любой пароль, например, 12345
Так же экспорт можно выполнить средствами PowerShell:Get-ChildItem -Path cert:\LocalMachine\My | Where-Object { $_.hasPrivateKey } | Foreach-Object { [system.IO.file]::WriteAllBytes( "$home\$($_.thumbprint).pfx",( $_.Export('PFX', '12345')) ) }
- Копируем сертификат и подписываемый файл в папку с утилитой signtool.exe
-
cd C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin
- Используя ранее заданный сертификату пароль, подписываем сертификат командой:
signtool.exe sign /fd SHA256 /a /f cert.pfx /p 12345 file.ps1
- Забираем подписанный сертификатом файл по пути C:\Users\%username%\AppData\Local\VirtualStore\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin