Вопрос или проблема
Я знаю, что можно использовать графические инструменты для аутентификации PIN-кодом на смарт-карте и затем удалить определённый контейнер на ней. Тем не менее, я хотел бы сделать это в скрипте, и всё, что я нашёл, что работает для меня, это встроенный certutil.exe в Windows. К сожалению, подходящая команда certutil.exe -delkey -csp "Microsoft Base Smart Card Crypto Provider" %containername%
требует повышения прав, что нелогично, поскольку графические инструменты, достигающие того же, не требуют повышения.
Итак, мой вопрос: знаете ли вы другие инструменты командной строки, которые могут сделать то же самое без необходимости повышения прав?
Это скрипт для пользователей на Windows 10/11, и наши смарт-карты (Thales Safenet ID Prime MD930) не совместимы с opensc 0.25.1, иначе pkcs11-tool.exe был бы моим решением.
Ответ или решение
К сожалению, на данный момент в ОС Windows нет встроенной командной строки, которая позволяла бы удалять контейнеры сертификатов на смарт-картах без необходимости повышения привилегий (elevation). Однако, есть несколько подходов и сторонних инструментов, которые могут помочь в решении данной задачи.
Использование сторонних утилит
-
PIV-DLL: Это библиотека и утилита, которая может помочь в работе со смарт-картами. Некоторые функции библиотеки могут использоваться для управления ключами и сертификатами. Вы можете настроить ее для работы с вашими смарт-картами Thales Safenet ID Prime MD930.
-
Smart Card Toolkits: Существуют различные программные инструменты от производителей смарт-карт (включая Thales), которые могут позволить взаимодействовать с вашим устройством через командную строку и не требуют повышения привилегий. Обратитесь к документации к вашему устройству для получения дополнительной информации.
Скрипты с использованием PowerShell
Хотя certutil.exe
требует повышения, вы можете рассмотреть возможность написания PowerShell-скрипта, который использует встроенные модули для работы со смарт-картами. Вот примерный скрипт, который может помочь в таких случаях. Однако в зависимости от настроек безопасности может потребоваться разрешение:
# Получение списка контейнеров сертификатов
$certs = Get-ChildItem -Path Cert:\CurrentUser\My
foreach ($cert in $certs) {
Write-Host "Container Name: $($cert.FriendlyName)"
}
Этот скрипт позволяет выводить названия контейнеров для последующего удаления, но для удаления может потребоваться использование других методов или библиотек.
Использование графических утилит в командной строке
Если графические утилиты, такие как certmgr.msc или специализированные инструменты от Thales, позволяют удалять контейнеры без прав администратора, вы можете рассмотреть возможность использования инструмента автоматизации, такого как AutoIt или PowerShell UI Automation, чтобы эмулировать действия пользователя в графическом интерфейсе. Например, вы можете записать сценарий, который открывает графический интерфейс, выполняет необходимые действия и затем закрывает его.
Заключение
К сожалению, универсальный командный инструмент для удаления контейнеров сертификатов на смарт-картах без дополнительных прав не существует. Тем не менее, сторонние утилиты и использование скриптов PowerShell или инструментов автоматизации могут стать оптимальным решением для вашей задачи. Рекомендуется обратиться к документации производителя устройства или технической поддержке, чтобы найти наиболее подходящее решение.