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

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

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

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


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

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


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

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

 

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


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

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


Цитата YuS_2:
Если код работает теперь, то его надо привести к автоматизации. Для этого необходимо определиться с этим:
1. Способ получения списка криптоконтейнеров. Для его создания используется определенная команда или же он собирается вручную? В общем, необходимо выбрать способ передачи списка в powershell.
2. Работает ли копирование контейнеров через csptest.exe, в принципе? Ошибка вываливается на некоторых контейнерах или на всех подряд?
- определимся с этими вопросами, тогда сделаю окончательный скрипт для копирования. »
Не совсем... Он по прежнему ругается на номер дома после ,
Код: Выделить весь код
PS C:\Windows\system32> $subject = (($str[1].p2 -replace ',(?=[^=,]*,)') -split ',')
PS C:\Windows\system32> $subject
ОГРН=1234567890
 СНИЛС=1234567890
 ИНН=1234567890
 E=1234567890_1234567890
 OU=Общее подразделение
 T=Генеральный директор
 CN=Иванов Иванов Иванович
 SN=Иванов
 G=Иванов Иванович
 C=RU
 L=Москва
 STREET="ул.Лобненская
 21"
т.е. не по маске "имя=значение"
Надо как то удалить из вывода конец строки Suject вместе с STREET="ул.Лобненская 21" чтобы таких ошибок больше не выскакивало.

1. Есть список в файле такого вида:
\\.\FAT12_F\99296548-3222-4f15-ada7-79d6bf8283ad
\\.\FAT12_F\86ba2ee2-c1ab-4e3a-b750-94cd57b6f1d5
\\.\FAT12_F\370415f5-9085-4582-b57c-bf746947a814
\\.\FAT12_F\cef3154b-5890-4614-8932-a2c73ea845bc
\\.\FAT12_F\e2a52506-f46a-449c-8e04-7a10e6d4e6aa
\\.\FAT12_F\62ed7b12-33d6-42b6-8774-ecac899a06ba
\\.\FAT12_F\77456a81-4b90-46b5-b276-147a4507d8a7
\\.\FAT12_F\53dfc883-8f5d-4cef-bce4-4ed0737fcf40
\\.\FAT12_F\83dce872-d49f-45d6-8761-9be05d915fe5
\\.\FAT12_F\76a5248e-6d98-4400-a7c4-766d7013c1fd
\\.\FAT12_F\d232b854-0356-4cc4-b51f-9b5eda1edf6a
\\.\FAT12_F\73a78cad-2b53-47df-bc9a-c12959ee5ad5
\\.\FAT12_F\82176ef9-076e-4661-bf70-4f035307ea54
\\.\FAT12_F\ea67cde7-2a3e-4f24-afe4-5553b6290b13
и т.д.

2. Копирование так и не работает ругается:
Код: Выделить весь код
>> cmd /c """C:\Program Files\Crypto Pro\CSP\csptest.exe"" -keycopy -contsrc "$fld" -contdest ""\\.\FAT12_D\$a""" -pindest="""""
WARNING: Useless positional arguments found: "Наталья", "Николаевна"
C:\Program Files\Crypto Pro\CSP\csptest.exe -keycopy [<options>]
CSPTEST copy container
<options>:
  -provsrc <name>   Specify source provider name
  -provdest <name>  Specify destination provider name
  -typesrc <type>   Specify source provider type
  -typedest <type>  Specify destination provider type
  -silent           Do not show any user interface
  -machinesrc       Use CRYPT_MACHINE_KEYSET
  -machinedest      Use CRYPT_MACHINE_KEYSET
  -contsrc <cont>   Source container
  -contdest <cont>  Destination container
  -archivable       Generate source key with CRYPT_ARCHIVABLE flag
  -pinsrc <PIN>     Source container pin
  -pindest <PIN>    Destination container pin
  -trace <mode>     Log level for internal messages
  -tfmt <flags>     Log format for internal messages
  -help             Print this help
Total: SYS: 0,000 sec USR: 0,000 sec UTC: 0,034 sec
[ErrorCode: 0x00000001]

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



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

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


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата ownsmir:
из вывода конец строки Suject вместе с STREET="ул.Лобненская 21" »
а, да, что-то про конец строки я и не подумал ... вот так должно быть:
Код: Выделить весь код
$issuer = ($str[0].p2 -replace ',(?=[^=,]*(,|$))') -split ','|convertfrom-stringdata
$subject = ($str[1].p2 -replace ',(?=[^=,]*(,|$))') -split ','|convertfrom-stringdata
Цитата ownsmir:
2. Копирование так и не работает ругается: »
тут я пока не могу ничего подсказать, ибо криптопро у меня нет. Но здесь важно определить, на всех контейнерах такая беда или на каком-то конкретном?
Пока проверьте исправленные строки, далее разберемся с выводом строки из переменной $a... что-то там явно не соответствует допустимому вводу csptest.exe

Цитата ownsmir:
1. Есть список в файле такого вида: »
с этим понятно, осталось только с копированием разобраться...

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

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

Отправлено: 17:39, 05-07-2019 | #32


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


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

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


YuS_2, YuS_2, YuS_2, YuS_2, YuS_2, YuS_2, YuS_2,
Цитата YuS_2:
Цитата ownsmir:
2. Копирование так и не работает ругается: »
тут я пока не могу ничего подсказать, ибо криптопро у меня нет. Но здесь важно определить, на всех контейнерах такая беда или на каком-то конкретном?
Пока проверьте исправленные строки, далее разберемся с выводом строки из переменной $a... что-то там явно не соответствует допустимому вводу csptest.exe
Цитата ownsmir:
1. Есть список в файле такого вида: »
с этим понятно, осталось только с копированием разобраться... »
С копированием разобрался) еще пару кавычек добавил к "$fld" и все сработало.
Собственно выкладываю получившийся код на текущий момент рабочий
Код: Выделить весь код
#requires -v 3.0
$fld = "\\.\FAT12_H\0c91ac552c88477eb85fb27ec79fe7df"

$tmp = cmd /c """C:\Program Files\Crypto Pro\CSP\certmgr.exe"" -list -cont ""$fld"""
$str = $tmp|?{$_ -match 'Not valid after|Subject|Issuer'}|convertfrom-string -d ' : '
$issuer = ($str[0].p2 -replace ',(?=[^=,]*(,|$))') -split ','|convertfrom-stringdata
$subject = ($str[1].p2 -replace ',(?=[^=,]*(,|$))') -split ','|convertfrom-stringdata
$date = [datetime]::parse(($str[2].p2 -replace 'UTC','GMT'))
$a = ($subject.o -replace '"')+$(" {0:dd.MM.yyyy} " -f $date)+($issuer.o -replace '"')
cmd /c """C:\Program Files\Crypto Pro\CSP\csptest.exe"" -keycopy -contsrc ""$fld"" -contdest ""\\.\FAT12_D\$a"" -pindest="""
Как бы теперь сделать:
1. Чтобы в $fld = подставлялись строки из текстового файла со списком (или еще лучше чтобы строка подставилась и удалилась в тектовом файле если нет ошибок) кстати над эти думал, писать допом все в лог, чтобы ошибки разобрать если что...

Отправлено: 10:57, 06-07-2019 | #33


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата ownsmir:
Как бы »
Пробуйте:
Код: Выделить весь код
#requires -v 3.0
$list = 'listcontainer.txt'
$certmgr = 'C:\Program Files\Crypto Pro\CSP\certmgr.exe'
$csptest = 'C:\Program Files\Crypto Pro\CSP\csptest.exe'
$dst = '\\.\FAT_D'

gc $list -enc utf8|%{
	try{
		[string]$container = $_
		$tmp = cmd /c """$certmgr"" -list -cont ""$_"""
		$str = $tmp|?{$_ -match 'Not valid before|Subject|Issuer'}|convertfrom-string -d ' : '
		$issuer = ($str[0].p2 -replace ',(?=[^=,]*(,|$))') -split ','|convertfrom-stringdata
		$subject = ($str[1].p2 -replace ',(?=[^=,]*(,|$))') -split ','|convertfrom-stringdata
		$date = [datetime]::parse(($str[2].p2 -replace 'UTC','GMT'))
		$a = ($subject.o -replace '"')+' '+($subject.cn -replace '"')+ `
		$(" {0:dd.MM.yyyy} " -f $date)+($issuer.o -replace '"')+' '+($issuer.cn -replace '"')
		cmd /c """$csptest"" -keycopy -contsrc ""$_"" -contdest ""$dst\$a"" -pindest="""""
	} catch {
		write-output "Произошла ошибка: $_ , контейнер: $container"|out-file error.log -enc utf8
	}
}
Только учтите, здесь добавлено поле "O" дополнительно к "CN" .

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


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

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

Отправлено: 12:49, 06-07-2019 | #34


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


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

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


Доброго дня... Хочу вернуться к данной теме...
Есть задача сделать помимо всей работы скрипта чтобы он дополнительно сравнил дату выпуска ключа и не обрабатывал его если дата меньше 16.12.2018 (на сегодняшний день), не подскажите как его изменить? Пробывал сам закончилось не рабочим скриптом.
Использую этот код:
Код: Выделить весь код
#requires -v 3.0
$list = 'C:\erkey.txt'
$certmgr = 'C:\Program Files\Crypto Pro\CSP\certmgr.exe'
$csptest = 'C:\Program Files\Crypto Pro\CSP\csptest.exe'
$dst = '\\.\FAT12_J'

gc $list -enc utf8|%{
	try{
		[string]$container = $_
		$tmp = cmd /c """$certmgr"" -list -cont ""$_"""
		$str = $tmp|?{$_ -match 'Not valid before|Subject|Issuer'}|convertfrom-string -d ' : '
		$issuer = ($str[0].p2 -replace ',(?=[^=,]*(,|$))') -split ','|convertfrom-stringdata
		$subject = ($str[1].p2 -replace ',(?=[^=,]*(,|$))') -split ','|convertfrom-stringdata
		$date = [datetime]::parse(($str[2].p2 -replace 'UTC','GMT'))
		$a = ($subject.o -replace '"')+ `
		$(" {0:dd.MM.yyyy} " -f $date)+($issuer.o -replace '"')
		$container
		$a
		cmd /c """$csptest"" -keycopy -contsrc ""$_"" -contdest ""$dst\$a"" -pindest="""""
	} catch {
		write-output "Произошла ошибка: $_ , контейнер: $container"|out-file error.log -enc utf8
	}
}

Отправлено: 15:11, 17-12-2019 | #35


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


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

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


И было бы идеально еще перебор паролей сделать в команде
Код: Выделить весь код
cmd /c """$csptest"" -keycopy -contsrc ""$_"" -pinsrc=""123456"" -contdest ""$dst\$a"" -pindest="""""
-pinsrc=""123456"" чтобы при неправльном пароле он попробЫвал другой который указан в переменной например.

Отправлено: 15:55, 17-12-2019 | #36


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата ownsmir:
Доброго дня... Хочу вернуться к данной теме... »
"Вспомнить всё"©фильм

Цитата ownsmir:
чтобы он дополнительно сравнил дату выпуска ключа »
непросто вспомнить о чем шла речь полгода назад, для разовой-то задачи...
Вопрос только в том, где брать эту дату выпуска ключа. Возможно, это дата из поля "Not valid before"? Тогда, если не ошибаюсь, требуется это:

Код: Выделить весь код
#requires -v 3.0
$d = get-date('16.12.2018')
$list = 'C:\erkey.txt'
$certmgr = 'C:\Program Files\Crypto Pro\CSP\certmgr.exe'
$csptest = 'C:\Program Files\Crypto Pro\CSP\csptest.exe'
$dst = '\\.\FAT12_J'
gc $list -enc utf8|%{
	try{
		[string]$container = $_
		$tmp = cmd /c """$certmgr"" -list -cont ""$_"""
		$str = $tmp|?{$_ -match 'Not valid before|Subject|Issuer'}|convertfrom-string -d ' : '
		$issuer = ($str[0].p2 -replace ',(?=[^=,]*(,|$))') -split ','|convertfrom-stringdata
		$subject = ($str[1].p2 -replace ',(?=[^=,]*(,|$))') -split ','|convertfrom-stringdata
		$date = [datetime]::parse(($str[2].p2 -replace 'UTC','GMT'))
		$a = ($subject.o -replace '"')+ `
		$(" {0:dd.MM.yyyy} " -f $date)+($issuer.o -replace '"')
		$container
		$a
		if ($date -gt $d){
			cmd /c """$csptest"" -keycopy -contsrc ""$_"" -contdest ""$dst\$a"" -pindest="""""
		}
	} catch {
		write-output "Произошла ошибка: $_ , контейнер: $container"|out-file error.log -enc utf8
	}
}
Цитата ownsmir:
чтобы при неправльном пароле он попробЫвал другой который указан в переменной например. »
Для этого необходимо получать код возврата от "csptest.exe" и если он возвращает какой-либо уникальный код, в случае неправильного ввода пароля, тогда можно что-нибудь будет придумать. Но, напомню: крипто про у меня не установлен, поэтому проверять и тестировать не на чем...

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


Отправлено: 09:30, 18-12-2019 | #37



Компьютерный форум 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




 
Переход