Ключевое слово в защите информации
ключевое слово
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline enthusasist  
#1 Оставлено : 9 декабря 2020 г. 22:34:21(UTC)
enthusasist

Статус: Новичок

Группы: Участники
Зарегистрирован: 21.09.2018(UTC)
Сообщений: 3

Сказал(а) «Спасибо»: 2 раз
Здравствуйте!
Подскажите пожалуйста как сделать автоматизацию в bat-скрипте.

Имеется:
windows server 2016
КриптоПро CSP 5.0.11944 КС3
папка с именем вида ab-cd123.000, в которой лежат 6 файлов ключей с расширением .key и файл личного сертификата пользователя .cer

Требуется: в скрипте устанавливать сертификат пользователя, желательно без необходимости использования usb-флешки.

Насколько я понимаю для установки сертификата нужно использовать команду типа такой:
Код:
certmgr.exe -inst -store uMy -file my-key.cer -cont "ab-cd123456-1234-1234-1234-123456789abc" -pin 12345678


Где "ab-cd123456-1234-1234-1234-123456789abc" - имя контейнера, начало которого совпадает с началом имени папки с ключами (ab-cd123)

Соответственно первый вопрос: Как автоматически получать полное имя контейнера, имея папку с сертификатом и ключами?

Как вариант можно создать виртуальный диск, например командой
Код:
subst R: C:\certs

Затем получить список сертификатов командой
Код:
csptest.exe -keyset -provtype 75 -enum_containers -verifycontext -fqcn

Получится что-то типа такого:
Код:

CSP (Type:75) v5.0.10006 KC3 Release Ver:5.0.11944 OS:Windows CPU:AMD64 FastCode:READY:DISABLED (GHASH; AESNI; RSA; ).
AcquireContext: OK. HCRYPTPROV: 88875152
\\.\FAT12_R\ab-cd123456-1234-1234-1234-123456789abc
OK.
Total: SYS: 0,031 sec USR: 0,000 sec UTC: 0,030 sec
[ErrorCode: 0x00000000]

Распарсить этот вывод, вытащить из него имя сертификата
(какой командой это сделать?)

Скопировать контейнер в реестр командой типа такой:

Код:
csptest.exe -keycopy -contsrc "\\.\FAT12_E\ab-cd123456-1234-1234-1234-123456789abc" -pinsrc=12345678 -contdest "\\.\HDIMAGE\ab-cd123456-1234-1234-1234-123456789abc" -pindest=12345678


После чего уже удалить виртуальный диск
Код:
subst R: /d

И запускать установку сертификата
Код:
certmgr.exe -inst -store uMy -file my-key.cer -cont "ab-cd123456-1234-1234-1234-123456789abc" -pin 12345678


Но может есть проще способы? Заранее благодарен за советы!

Отредактировано пользователем 9 декабря 2020 г. 22:42:10(UTC)  | Причина: Не указана

Offline two_oceans  
#2 Оставлено : 10 декабря 2020 г. 8:15:07(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 397 раз в 367 постах
Добрый день.
К слову, уже начиная с Windows XP (почти 20 лет назад), введено расширение .cmd для новых скриптов, а .bat оставлено старых DOS скриптов, как своеобразный символ, что консоль на новых операционных системах уже не то же самое. Так что на windows server 2016 уже глаз режет название bat (хоть суть не очень меняется).

1) Самый простой способ узнать имя контейнера: типично, в папке ab-cd123.000 лежит файл name.key с именем контейнера. В начале там заголовок (DER ASN.1 структура, из которой можно считать длину имени), потом собственно имя контейнера в кодировке windows-1251. Если name.key сделан штатно криптопровайдером и его не правили, то в общем-то нет причин читать длину, просто можно отступить от начала 4 байта (для длины имени менее 125 байт - соответственно длина файла name.key менее 129 байт). Если правили, то в конце могут быть лишние символы, так что нужно считать длину - байт перед именем (для длины имени менее 125 байт). Если длиннее, то надо уже разбираться с ASN.1 полноценно. Так не придется парсить вывод программы.

Пример: name.key длины 54 байта, первые 4 такие: 0x30 0x34 0x16 0x32 = SEQUENCE (0x30) длина=54 (0x34), IA5STRING (0x16) длина=50 (0x32). Другими словами, длина первой структуры совпадает с длиной файла, то есть никакого мусора в конце файла нет. Длина второй структуры 50 байт - это 50 символов имени. Пропускаем 4 байта, читаем 50 байт названия контейнера.
2) Аналогично с копированием в реестр. Технически при копировании в реестре создается раздел с именем контейнера, в котором 6 параметров, соответствующих названию файлов key в папке ab-cd123.000. Можно просто считать содержимое 6 файлов, перевести в шестнадцатиричный вид каждый байт и записать в реестр командой reg add либо записать .reg файл и добавить regedit ом. Основной вопрос с определением sid нужного пользователя.
3) вместо subst можно использовать mklink /d или mklink /j в корень какого-то диска. Создастся что-то типа ярлыка на папку, но в отличие от ярлыка символическая ссылка или соединение работают на уровне файловой системы, но есть для большинства программ не отличаются от обычной папки.
4) в версии 5.0 есть HDIMAGE (считыватель Директория), то есть можно просто папку ab-cd123.000 скопировать в определенное место в профиле пользователя.

Как реализовать 1 или 2 в cmd файле конечно вопрос интересный, способ наверняка есть, но я не настолько часто пользуюсь консолью. Как обходной маневр, использую конструкцию cmd - vbs/js - cmd: основной cmd запускает vbs/js (записывающий второй cmd) потом второй cmd. В vbs/js возможностей автоматизации побольше.

Отредактировано пользователем 10 декабря 2020 г. 8:17:01(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил two_oceans за этот пост.
enthusasist оставлено 17.12.2020(UTC)
Offline Андрей *  
#3 Оставлено : 10 декабря 2020 г. 9:14:22(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,162
Мужчина
Российская Федерация

Сказал «Спасибо»: 618 раз
Поблагодарили: 2389 раз в 1880 постах
Здравствуйте.

csptest -absorb -certs -autoprov

Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
enthusasist оставлено 17.12.2020(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.