Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Info
iconfalse

Данная инструкция описывает сценарий автоматического подписания файлов с помощью SignTool и Рутокен ЭЦП. При настройке кэширования PIN кода, можно настроить автоматическое подписания без входа в сеанс пользователя Windows 10.
Проверка данного сценария проводилась на виртуальной машине Windows 10 с использованием Рутокен ЭЦП 3.0 3220. Проброс Рутокена на виртуальную машину не привёл к каким-либо ошибкам и трудностям.

Table of Contents
includeИмпорт сертификата на Рутокен Изменение Криптопровайдера Регистрация сертификатов Настройка кеширования PIN кода Создание скрипта для подписания документов Добавление Скрипта в Службы Windows Настройка службы Итог

Импорт сертификата на Рутокен

...

Ниже приведён пример скрипта Power Shell для подписания файлов помещённых в заранее созданную папку через SignTool. 
Скрипт автоматически перемещает файл C:\test.exe  в папку C:\sign и подписывает его.
После чего, скрипт переходит в статус ожидания. Далее можно вручную переносить файлы с расширением ".exe" в папку sign, скрипт автоматически его подпишет.

# Path and filter settings
$path = "C:\sign"
$filter = "*.exe"


# Ensure the path exists
if (!(Test-Path $path)) { 
    Write-Host "Path '$path' does not exist!" 
    return 
}


# The script block called when files are created
$action = { 
    $signtoolPath = "C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64\signtool.exe"
    $filePath = $Event.SourceEventArgs.FullPath
    $arguments = "sign /debug /sha1 f90be6d6ba25c388a384189ba5cd7975a3a04389 /v /td SHA256 $filePath"
    Write-Host "Signing file '$filePath'"
    Start-Process -FilePath $signtoolPath -ArgumentList $arguments -NoNewWindow
}


$sourceIdentifier = "FileCreated"


# Unregister the event if it is already registered
try {
    $existingEvent = Get-EventSubscriber -SourceIdentifier $sourceIdentifier -ErrorAction Stop
    if ($null -ne $existingEvent) {
        Unregister-Event -SourceIdentifier $sourceIdentifier
    }
}
catch {
    Write-Host "Event not found. Registering the event."
}


# Create the FileSystemWatcher
$fsw = New-Object IO.FileSystemWatcher $path, $filter
$fsw.EnableRaisingEvents = $true


$job = Register-ObjectEvent $fsw Created -SourceIdentifier $sourceIdentifier -Action $action


# Validate if the event is actually registered
if (Get-EventSubscriber | Where-Object { $_.SourceIdentifier -eq $sourceIdentifier })
{
    Write-Host "Event has been registered successfully."
}
else
{
    Write-Host "Failed to register event."
}


Write-Host "Script is now monitoring $path."



# Copy test.exe to the sign folder
$testExePath = "C:\test.exe"
if (Test-Path $testExePath) {
    Copy-Item $testExePath -Destination $path
    Write-Host "test.exe copied to $path."
} else {
    Write-Host "Could not find $testExePath."
}



# Prevent the console from closing immediately
do {
    Start-Sleep -Seconds 1
} while ($true)


Добавление Скрипта в Службы Windows

...

  1. Для установки NSSM, необходимо запустить PowerShell. Для этого, откроем поиск и наберём PowerShell ISE. Запустить его нужно от имени администратора.


  2. Создаём новый файл и запускаем команды для установки NSSM:

    Set-ExecutionPolicy Bypass -Scope Process -Force; `
    iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))



  3. Создаём новый сценарий в PowerShell ISE, прописываем наш скрипт для подписания файлов (из раздела Создание скрипта для подписи документов) и сохраняем в удобном месте (в нашем примере, скрипт сохранён по пути C:\script.ps1)


  4. Далее, прописываем и запускаем команду для добавления нашего скрипта в службы Windows. В данном примере, служба будет называться "script".

    $NSSMPath = (Get-Command "C:\ProgramData\chocolatey\bin\nssm.exe").Source
    $NewServiceName = "script"
    $PoShPath= (Get-Command powershell).Source
    $PoShScriptPath = "C:\script.ps1"
    $args = '-ExecutionPolicy Bypass -NoProfile -File "{0}"' -f $PoShScriptPath
    & $NSSMPath install $NewServiceName $PoShPath $args
    & $NSSMPath status $NewServiceName


    Start-Service $NewServiceName
    Get-Service $NewServiceName

Настройка службы

  1. Для начала, необходимо проверить, создалась ли наша служба. Для этого, в поиске прописываем и запускаем Службы.


  2. В списке служб, находим нашу (в данном примере, называется script). Кликаем по ней правой кнопкой мыши и переходим в Свойства.


  3. В свойствах переходим во вкладку Вход в систему и указываем имя и пароль пользователя, от имени которого будет запускаться служба. Применяем и перезагружаем компьютер.

...