Любой язык - Крипто про он же csptest.exe

Ответить
 • Просмотры: 1
Аватара пользователя
YuS_2

Re: Любой язык - Крипто про он же csptest.exe

Сообщение YuS_2 »

Цитата YuS_2:



Если код работает теперь, то его надо привести к автоматизации. Для этого необходимо определиться с этим:

1. Способ получения списка криптоконтейнеров. Для его создания используется определенная команда или же он собирается вручную? В общем, необходимо выбрать способ передачи списка в powershell.

2. Работает ли копирование контейнеров через csptest.exe, в принципе? Ошибка вываливается на некоторых контейнерах или на всех подряд?

- определимся с этими вопросами, тогда сделаю окончательный скрипт для копирования.
Любой язык - Крипто про он же 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 []
CSPTEST copy container
:
  -provsrc    Specify source provider name
  -provdest   Specify destination provider name
  -typesrc    Specify source provider type
  -typedest   Specify destination provider type
  -silent           Do not show any user interface
  -machinesrc       Use CRYPT_MACHINE_KEYSET
  -machinedest      Use CRYPT_MACHINE_KEYSET
  -contsrc    Source container
  -contdest   Destination container
  -archivable       Generate source key with CRYPT_ARCHIVABLE flag
  -pinsrc      Source container pin
  -pindest     Destination container pin
  -trace      Log level for internal messages
  -tfmt      Log format for internal messages
  -help             Print this help
Total: SYS: 0,000 sec USR: 0,000 sec UTC: 0,034 sec
[ErrorCode: 0x00000001]
Аватара пользователя
YuS_2

Re: Любой язык - Крипто про он же csptest.exe

Сообщение YuS_2 »

Цитата ownsmir:



из вывода конец строки Suject вместе с STREET="ул.Лобненская 21"
Любой язык - Крипто про он же csptest.exe




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



Код:

Код: Выделить всё

$issuer = ($str[0].p2 -replace ',(?=[^=,]*(,|$))') -split ','|convertfrom-stringdata
$subject = ($str[1].p2 -replace ',(?=[^=,]*(,|$))') -split ','|convertfrom-stringdata


Цитата ownsmir:



2. Копирование так и не работает ругается:
Любой язык - Крипто про он же csptest.exe




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

Пока проверьте исправленные строки, далее разберемся с выводом строки из переменной $a... что-то там явно не соответствует допустимому вводу csptest.exe




Цитата ownsmir:



1. Есть список в файле такого вида:
Любой язык - Крипто про он же csptest.exe




с этим понятно, осталось только с копированием разобраться...
Аватара пользователя
ownsmir

Re: Любой язык - Крипто про он же csptest.exe

Сообщение ownsmir »

YuS_2, YuS_2, YuS_2, YuS_2, YuS_2, YuS_2, YuS_2,
Цитата YuS_2:



Цитата ownsmir:

2. Копирование так и не работает ругается: »

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

Пока проверьте исправленные строки, далее разберемся с выводом строки из переменной $a... что-то там явно не соответствует допустимому вводу csptest.exe

Цитата ownsmir:

1. Есть список в файле такого вида: »

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




С копированием разобрался) еще пару кавычек добавил к "$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 = подставлялись строки из текстового файла со списком (или еще лучше чтобы строка подставилась и удалилась в тектовом файле если нет ошибок) кстати над эти думал, писать допом все в лог, чтобы ошибки разобрать если что...
Аватара пользователя
YuS_2

Re: Любой язык - Крипто про он же csptest.exe

Сообщение YuS_2 »

Цитата ownsmir:



Как бы
Любой язык - Крипто про он же csptest.exe




Пробуйте:



Код:

Код: Выделить всё

#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" .
Аватара пользователя
ownsmir

Re: Любой язык - Крипто про он же csptest.exe

Сообщение ownsmir »

Доброго дня... Хочу вернуться к данной теме...

Есть задача сделать помимо всей работы скрипта чтобы он дополнительно сравнил дату выпуска ключа и не обрабатывал его если дата меньше 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
	}
}
Аватара пользователя
ownsmir

Re: Любой язык - Крипто про он же csptest.exe

Сообщение ownsmir »

И было бы идеально еще перебор паролей сделать в команде



Код:

Код: Выделить всё

cmd /c """$csptest"" -keycopy -contsrc ""$_"" -pinsrc=""123456"" -contdest ""$dst\$a"" -pindest="""""

-pinsrc=""123456"" чтобы при неправльном пароле он попробЫвал другой который указан в переменной например.
Аватара пользователя
YuS_2

Re: Любой язык - Крипто про он же csptest.exe

Сообщение YuS_2 »

Цитата ownsmir:



Доброго дня... Хочу вернуться к данной теме...
Любой язык - Крипто про он же csptest.exe




"Вспомнить всё"©фильм

Изображение


Цитата ownsmir:



чтобы он дополнительно сравнил дату выпуска ключа
Любой язык - Крипто про он же csptest.exe




непросто вспомнить о чем шла речь полгода назад, для разовой-то задачи...

Вопрос только в том, где брать эту дату выпуска ключа. Возможно, это дата из поля "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




Для этого необходимо получать код возврата от "csptest.exe" и если он возвращает какой-либо уникальный код, в случае неправильного ввода пароля, тогда можно что-нибудь будет придумать. Но, напомню: крипто про у меня не установлен, поэтому проверять и тестировать не на чем...
Ответить

Вернуться в «Скриптовые языки администрирования Windows»