Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Крипто про он же csptest.exe

Ответить
Настройки темы
Любой язык - Крипто про он же csptest.exe

Новый участник


Сообщения: 46
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте! Уважаемые умы!
У меня по работе очень много разных эцп, от разных УЦ. Соответственно каждый УЦ при формировании ключа, обзывает его по своему, а зачастую это выглядит вот так "iojng-er4gedfgv-454g-45g45g" и т.д. Ну в общем все ключи называются по разному, бухгалтера несчастные по пол часа ищут нужное ЭЦП для работы с компанией по отчетности.
Смысл все темы таков, хочу взять все ключи на флешке (их порядка 1500) и через скрипт каждую подпись переименовать по человечески по образцу (НО информацию о ключе нужно брать из открытого ключа "Сертификата" т.к. актуальная и полная информация только там) образец "Ромашка, ООО от 13.01.2019 СКБ Контур" есть ли такая возможность?

Отправлено: 11:52, 02-07-2019

 

Аватара для YuS_2

Crazy


Contributor


Сообщения: 1231
Благодарности: 515

Профиль | Отправить PM | Цитировать


Цитата ownsmir:
Сколько в интернете прочитал, толком не могу найти информацию как правильно взять определенную информацию и потом ее использовать. »
В cmd не совсем просто разбирать такой текст...
Попробуем с помощью того же powershell
script.ps1
Код: Выделить весь код
#requires -v 3.0
$fld = "\\.\FAT12_F\*****"

$tmp = cmd /c """С:\путь_к_ менеджеру_крипто_про\certmgr.exe"" -list -cont ""$fld"""

$str = $tmp|?{$_ -match 'Not valid before|Subject|Issuer'}|convertfrom-string -d ' : '
$issuer = $str[0].p2 -split ','|convertfrom-stringdata
$subject = $str[1].p2 -split ','|convertfrom-stringdata
$date = [datetime]::parse(($str[2].p2 -replace 'UTC','GMT'))
$a = ($subject.cn -replace '"')+$(" {0:dd.MM.yyyy} " -f $date)+($issuer.cn -replace '"')

cmd /c "csptest.exe -keycopy -src ""$fld"" -dest ""\\.\FAT12_G\$a"" -pindest="""""
Проверять мне не на чем, поэтому проверяйте у себя.
Особенно следует обратить внимание на путь к контейнеру и отрабатывание команд содержащих запуск cmd.
Цитата ownsmir:
\\.\FAT12_П »
- это правильно указано в Вашей строке?

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 05-07-2019 в 08:17. Причина: поправлено оформление кода и сам код

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:07, 04-07-2019 | #21



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 46
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
#requires -v 2.0
$fld = "\\.\FAT12_F\*****"
$tmp = cmd /c "certmgr -list -cont $fld"
$str = $tmp|?{$_ -match 'Not valid before|Subject|Issuer'}|ConvertFrom-String -d ' : '
$issuer=$str[0].p2 -split ','|convertfrom-stringdata
$subject = $str[1].p2 -split ','|convertfrom-stringdata
$date = [datetime]::parse(($str[2].p2 -replace 'UTC','GMT'))
$a = ($subject.cn -replace '"')+$(" {0:dd.MM.yyyy} " -f $date)+($issuer.cn -replace '"')
cmd /c "csptest.exe -keycopy -src $fld -dest ""\\.\FAT12_П\$a"" -pindest=""""" »
Открывается certmgr и все(((
Не в cmd идет а приложение запускает

Цитата YuS_2:
\\.\FAT12_П »
- это правильно указано в Вашей строке? »
Ошибся раскладкой тестирую на диске D

Отправлено: 20:44, 04-07-2019 | #22


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1231
Благодарности: 515

Профиль | Отправить PM | Цитировать


Цитата ownsmir:
Открывается certmgr и все(((
Не в cmd идет а приложение запускает »
это mmc оснастка?
Тогда надо вместо certmgr, указать полный путь к менеджеру криптопро:
Код: Выделить весь код
'С:\путь_к_ менеджеру_крипто_про\certmgr.exe'
Цитата ownsmir:
Ошибся раскладкой тестирую на диске D »
Надо тогда исправить на то, что требуется...

ЗЫ Код выше поправил немного, но имя контейнера, пути к менеджеру и букву носителя указывайте свои, естественно...
Однако, судя по всему, то, что Вы желаете получить, возможно, не поддерживается:
Цитата:
[имя].[NNN]
[имя] - 8 первых символов имени контейнера; Для символов от 'a' до 'z', от 'A' до 'Z', от '0' до '9' и символа '-' симолы остаются без изменений, для отсальных символов происходит замена на символ с ASCII кодом вычисляемым по формула c%('z'-'a'+1)+'a', где c исходный симол имени контейнера.

[NNN] - порядковый номер контейнера на этом носителе внутри множества совпадающих имен [имя].
... хотя, это относится к именованию FOLDER, а не UNIQUE или CONTAINER... в общем, пробуйте.

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 05-07-2019 в 08:36.

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:08, 04-07-2019 | #23


Новый участник


Сообщения: 46
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
ЗЫ Код выше поправил немного, но имя контейнера, пути к менеджеру и букву носителя указывайте свои, естественно...
Однако, судя по всему, то, что Вы желаете получить, возможно, не поддерживается:
Цитата: »
Получаю на этой команде такую ошибку
PS C:\Users\vv\Desktop> $subject = $str[1].p2 -split ','|convertfrom-stringdata

convertfrom-stringdata : Строка данных " 4" указана в формате, отличном от следующего: "имя=значение".
строка:1 знак:34
+ $subject = $str[1].p2 -split ','|convertfrom-stringdata
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: ( [ConvertFrom-StringData], PSInvalidOperationException
+ FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.ConvertFromStringDataCommand

Получившийся код

Код: Выделить весь код
#requires -v 3.0
$fld = "\\.\FAT12_F\7dde151d-1dd7-49cb-af7c-f3f64197a320"

$tmp = cmd /c """C:\Program Files\Crypto Pro\CSP\certmgr.exe"" -list -cont ""$fld"""

$str = $tmp|?{$_ -match 'Not valid before|Subject|Issuer'}|convertfrom-string -d ' : '
$issuer = $str[0].p2 -split ','|convertfrom-stringdata
$subject = $str[1].p2 -split ','|convertfrom-stringdata
$date = [datetime]::parse(($str[2].p2 -replace 'UTC','GMT'))
$a = ($subject.cn -replace '"')+$(" {0:dd.MM.yyyy} " -f $date)+($issuer.cn -replace '"')

cmd /c "csptest.exe -keycopy -src ""$fld"" -dest ""\\.\FAT12_D\$a"" -pindest="""""

Отправлено: 09:28, 05-07-2019 | #24


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1231
Благодарности: 515

Профиль | Отправить PM | Цитировать


Цитата ownsmir:
Получаю на этой команде такую ошибку
PS C:\Users\vv\Desktop> $subject = $str[1].p2 -split ','|convertfrom-stringdata »
Тогда надо смотреть вывод $str
Код: Выделить весь код
#requires -v 3.0
$fld = '\\.\FAT12_F\7dde151d-1dd7-49cb-af7c-f3f64197a320'

$tmp = cmd /c """C:\Program Files\Crypto Pro\CSP\certmgr.exe"" -list -cont ""$fld"""

$str = $tmp|?{$_ -match 'Not valid before|Subject|Issuer'}|convertfrom-string -d ' : '
$str
Что выводит?

Ну и на всякий случай, в полном коде, завернем в скобки:
Код: Выделить весь код
#requires -v 3.0
$fld = "\\.\FAT12_F\7dde151d-1dd7-49cb-af7c-f3f64197a320"

$tmp = cmd /c """C:\Program Files\Crypto Pro\CSP\certmgr.exe"" -list -cont ""$fld"""

$str = $tmp|?{$_ -match 'Not valid before|Subject|Issuer'}|convertfrom-string -d ' : '
$issuer = ($str[0].p2 -split ',')|convertfrom-stringdata
$subject = ($str[1].p2 -split ',')|convertfrom-stringdata
$date = [datetime]::parse(($str[2].p2 -replace 'UTC','GMT'))
$a = ($subject.cn -replace '"')+$(" {0:dd.MM.yyyy} " -f $date)+($issuer.cn -replace '"')

cmd /c "csptest.exe -keycopy -src ""$fld"" -dest ""\\.\FAT12_D\$a"" -pindest="""""
хотя это, теоретически, на результат влиять не должно...

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:27, 05-07-2019 | #25


Новый участник


Сообщения: 46
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
Тогда надо смотреть вывод $str
Код:
#requires -v 3.0
$fld = '\\.\FAT12_F\7dde151d-1dd7-49cb-af7c-f3f64197a320'
$tmp = cmd /c """C:\Program Files\Crypto Pro\CSP\certmgr.exe"" -list -cont ""$fld"""
$str = $tmp|?{$_ -match 'Not valid before|Subject|Issuer'}|convertfrom-string -d ' : '
$str
Что выводит? »
Код: Выделить весь код
PS C:\Windows\system32> #requires -v 3.0
При создании конвейера произошла ошибка.
    + CategoryInfo          : NotSpecified: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : RuntimeException

PS C:\Windows\system32> $fld = '\\.\FAT12_F\7dde151d-1dd7-49cb-af7c-f3f64197a320'
PS C:\Windows\system32>
PS C:\Windows\system32> $tmp = cmd /c """C:\Program Files\Crypto Pro\CSP\certmgr.exe"" -list -cont ""$fld"""
PS C:\Windows\system32>
PS C:\Windows\system32> $str = $tmp|?{$_ -match 'Not valid before|Subject|Issuer'}|convertfrom-string -d ' : '
PS C:\Windows\system32> $str

P1                  P2
--                  --
Issuer              E=ca_tensor@tensor.ru, ОГРН=1027600787994, ИНН=007605016030, C=RU, S=76 Ярославская область, L=г. Ярославль, STREET=Московский проспект д.12, OU=Удостоверяющий центр, O="ООО ""КОМПАНИЯ ""ТЕНЗОР""", CN="ООО ""КОМПАНИЯ ""ТЕНЗОР"""
Subject             STREET="**************", S=77 г. Москва, L=Москва, C=RU, G=Иванова Ивановна, SN=Иванова, CN=Название компании, T=ПРЕДСЕДАТЕЛЬ, OU=0, O=Название компании, E=почта, ИНН=1234567890, СНИЛС=1234567890, ОГРН=1234567890
Not valid before    11/10/2018  08:18:57 UTC

Отправлено: 10:35, 05-07-2019 | #26


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1231
Благодарности: 515

Профиль | Отправить PM | Цитировать


ownsmir, вывод, вроде бы правильный
картинка

если не заработает со скобками, то надо увидеть, что спрятано под астериксами... возможно, там присутствует какой-то из спецсимволов, которые не нравятся командлету.

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:52, 05-07-2019 | #27


Новый участник


Сообщения: 46
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
если не заработает со скобками, то надо увидеть, что спрятано под астериксами... возможно, там присутствует какой-то из спецсимволов, которые не нравятся командлету. »
Он ругается на первую команду
Код: Выделить весь код
#requires -v 3.0
При создании конвейера произошла ошибка.
    + CategoryInfo          : NotSpecified: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : RuntimeException
и потом на эту
Код: Выделить весь код
$subject = ($str[1].p2 -split ',')|convertfrom-stringdata
convertfrom-stringdata : Строка данных " 4" указана в формате, отличном от следующего: "имя=значение".
строка:1 знак:36
+ $subject = ($str[1].p2 -split ',')|convertfrom-stringdata
+                                    ~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [ConvertFrom-StringData], PSInvalidOperationException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.ConvertFromStringDataCommand
Причем эту первую отработала без ошибок
Код: Выделить весь код
$issuer = ($str[0].p2 -split ',')|convertfrom-stringdata

Отправлено: 11:47, 05-07-2019 | #28


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1231
Благодарности: 515

Профиль | Отправить PM | Цитировать


Цитата ownsmir:
Он ругается на первую команду »
на #requires -v 3.0, он ругаться не может, это, всего лишь, требование к версии powershell, если она выше, то никакой реакции не будет.

Цитата ownsmir:
Причем эту первую отработала без ошибок »
вот я и говорю, что строка со звездами отрабатывает без ошибок, значит что-то мешает из того, что скрыто под ними.
Покажите то, что скрыто под звездами, причем полностью все символы, кроме букв, их можно скрыть.

ЗЫ
есть предположение, что в этих символах присутствует запятая, поэтому, чтобы строка не "ломалась", мы такие запятые можем просто удалять.
Замените две строки на такие:
Код: Выделить весь код
$issuer = (($str[0].p2 -replace ',(?=[^=,]*,)') -split ',')|convertfrom-stringdata
$subject = (($str[1].p2 -replace ',(?=[^=,]*,)') -split ',')|convertfrom-stringdata

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 05-07-2019 в 13:19. Причина: добавление

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:52, 05-07-2019 | #29


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1231
Благодарности: 515

Профиль | Отправить PM | Цитировать


Если код работает теперь, то его надо привести к автоматизации. Для этого необходимо определиться с этим:
1. Способ получения списка криптоконтейнеров. Для его создания используется определенная команда или же он собирается вручную? В общем, необходимо выбрать способ передачи списка в powershell.
2. Работает ли копирование контейнеров через csptest.exe, в принципе? Ошибка вываливается на некоторых контейнерах или на всех подряд?
- определимся с этими вопросами, тогда сделаю окончательный скрипт для копирования.

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:22, 05-07-2019 | #30



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Крипто про он же csptest.exe

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Крипто Про CSP 4.0 и R4 в тихом режиме (FYI) merdzd Автоматическая установка приложений 3 22-04-2019 01:04
Разное - Windows 10 и Крипто-про CSP 3.9 Auberdin Microsoft Windows 10 1 21-09-2015 22:45
Разное - как создать exe для запуска другого exe с параметрами, из той же папки vzli_izv Программирование и базы данных 12 08-06-2013 14:49
iRU Stilo 2214L (он же Mitac 8081) не видит DVD D@nilYcH Ноутбуки 0 31-07-2011 16:19
MacBook Pro 2011. Какой же он? Welron Новости железа 0 22-02-2011 22:07




 
Переход