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Регистрация

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

Для импорта сертификата на Рутокен необходимо выполнить следующие действия

  1. Нажмите кнопку Пуск и введите 

...

  1. Командная строка и выберите пункт Запуск от имени администратора.
    Image Added

  2. Если необходимо введите имя и пароль администратора компьютера.
  3. Подключите Рутокен к компьютеру.
  4. В командной строке наберите следующую команду: certutil -csp "Microsoft Base Smart Card Crypto Provider" -importpfx C:\sign_code.pfx и нажмите Enter.
  5. Введите пароль PFX и нажмите Enter.
    Image Modified

  6. Введите PIN-код от Рутокена и нажмите ОК.
    Image Modified

  7. Дождитесь сообщения что команда успешно выполнена.
    Image Modified

Изменение Криптопровайдера

Для корректной работы SignTool при закешированном PIN коде от Рутокена, необходимо изменить параметры криптопровайдера.

  1. Зайти в Панель Управления Рутокен и перейти в раздел Настройки.
  2. В разделе Настройки криптопровайдера необходимо нажать на "Настроить криптопровайдер".
  3. В пункте "Семейство Рутокен ЭЦП", необходимо выбрать Aktiv ruToken CSP v1.0.
  4. После этого потребуется отключить токен, перезагрузить компьютер и подключить его обратно для применения настроек.
    Image Added

Регистрация сертификатов

Для корректной работы SignTool, необходимо зарегистрировать сертификат.
Для этого в Панеле Управления Рутокен, в разделе Сертификаты необходимо поставить галочку напротив нужного сертификата для подписи.
Так же, необходимо проверить, что на нужном вами сертификате указан криптопровайдер Aktiv ruToken CSP v1.0.
Image Added

Подробнее с работой в Панели Управления Рутокен можно ознакомиться в статье Начало работы с устройствами Рутокен.

Настройка кеширования PIN кода

Для включения кеширования пин-кода необходимо обратиться в службу нашей технической поддержки.

Создание скрипта для подписания документов

Ниже приведён пример скрипта 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

Для того, чтобы скрипт работал при старте ОС и подписывал файл до входа в учётную запись пользователя, необходимо запустить скрипт как службу Windows.
Для этого используем NSSM (Non-Sucking Service Manager) — это утилита, позволяющая устанавливать исполняемые файлы приложений в качестве служб в ОС семейства Microsoft Windows.

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

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

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

    Image Added

  3. Создаём новый сценарий в PowerShell ISE, прописываем наш скрипт для подписания файлов (из раздела Создание скрипта для подписи документов) и сохраняем в удобном месте (в нашем примере, скрипт сохранён по пути C:\script.ps1)
    Image Added
  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. Для начала, необходимо проверить, создалась ли наша служба. Для этого, в поиске прописываем и запускаем Службы.
    Image Added

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

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

Итог

Если вы настроили кеширование PIN-кода и создали службу как указано в инструкции, то при подключенном Рутокене к машине, у вас будет подписываться указанный вами в скрипте файл до логина в учётную запись пользователя. Для