Показать полную графическую версию : Крипто про он же csptest.exe
Сколько в интернете прочитал, толком не могу найти информацию как правильно взять определенную информацию и потом ее использовать. »
В 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.
\\.\FAT12_П »
- это правильно указано в Вашей строке?
#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 идет а приложение запускает
\\.\FAT12_П »
- это правильно указано в Вашей строке? »
Ошибся раскладкой тестирую на диске D
Открывается certmgr и все(((
Не в cmd идет а приложение запускает »
это mmc оснастка?
Тогда надо вместо certmgr, указать полный путь к менеджеру криптопро:
'С:\путь_к_ менеджеру_крипто_про\certmgr.exe'
Ошибся раскладкой тестирую на диске D »
Надо тогда исправить на то, что требуется...
ЗЫ Код выше поправил немного, но имя контейнера, пути к менеджеру и букву носителя (http://cpdn.cryptopro.ru/?url=/content/csp39/html/group___pro_c_s_p_ex_LPSZ_CONTAINER_NAME.html) указывайте свои, естественно...
Однако, судя по всему, то, что Вы желаете получить, возможно, не поддерживается:
[имя].[NNN]
[имя] - 8 первых символов имени контейнера; Для символов от 'a' до 'z', от 'A' до 'Z', от '0' до '9' и символа '-' симолы остаются без изменений, для отсальных символов происходит замена на символ с ASCII кодом вычисляемым по формула c%('z'-'a'+1)+'a', где c исходный симол имени контейнера.
[NNN] - порядковый номер контейнера на этом носителе внутри множества совпадающих имен [имя].
... хотя, это относится к именованию FOLDER, а не UNIQUE или CONTAINER... в общем, пробуйте.
ЗЫ Код выше поправил немного, но имя контейнера, пути к менеджеру и букву носителя указывайте свои, естественно...
Однако, судя по всему, то, что Вы желаете получить, возможно, не поддерживается:
Цитата: »
Получаю на этой команде такую ошибку
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="""""
Получаю на этой команде такую ошибку
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="""""
хотя это, теоретически, на результат влиять не должно...
Тогда надо смотреть вывод $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
ownsmir, вывод, вроде бы правильный
https://jpegshare.net/images/54/88/54882bea298a2e7014591c7d2d7a0013.png (https://jpegshare.net/)
если не заработает со скобками, то надо увидеть, что спрятано под астериксами... возможно, там присутствует какой-то из спецсимволов, которые не нравятся командлету.
если не заработает со скобками, то надо увидеть, что спрятано под астериксами... возможно, там присутствует какой-то из спецсимволов, которые не нравятся командлету. »
Он ругается на первую команду
#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
Он ругается на первую команду »
на #requires -v 3.0, он ругаться не может, это, всего лишь, требование к версии powershell, если она выше, то никакой реакции не будет.
Причем эту первую отработала без ошибок »
вот я и говорю, что строка со звездами отрабатывает без ошибок, значит что-то мешает из того, что скрыто под ними.
Покажите то, что скрыто под звездами, причем полностью все символы, кроме букв, их можно скрыть.
ЗЫ
есть предположение, что в этих символах присутствует запятая, поэтому, чтобы строка не "ломалась", мы такие запятые можем просто удалять.
Замените две строки на такие:
$issuer = (($str[0].p2 -replace ',(?=[^=,]*,)') -split ',')|convertfrom-stringdata
$subject = (($str[1].p2 -replace ',(?=[^=,]*,)') -split ',')|convertfrom-stringdata
Если код работает теперь, то его надо привести к автоматизации. Для этого необходимо определиться с этим:
1. Способ получения списка криптоконтейнеров. Для его создания используется определенная команда или же он собирается вручную? В общем, необходимо выбрать способ передачи списка в powershell.
2. Работает ли копирование контейнеров через csptest.exe, в принципе? Ошибка вываливается на некоторых контейнерах или на всех подряд?
- определимся с этими вопросами, тогда сделаю окончательный скрипт для копирования.
Если код работает теперь, то его надо привести к автоматизации. Для этого необходимо определиться с этим:
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]
из вывода конец строки Suject вместе с STREET="ул.Лобненская 21" »
а, да, что-то про конец строки я и не подумал ... вот так должно быть:
$issuer = ($str[0].p2 -replace ',(?=[^=,]*(,|$))') -split ','|convertfrom-stringdata
$subject = ($str[1].p2 -replace ',(?=[^=,]*(,|$))') -split ','|convertfrom-stringdata
2. Копирование так и не работает ругается: »
тут я пока не могу ничего подсказать, ибо криптопро у меня нет. Но здесь важно определить, на всех контейнерах такая беда или на каком-то конкретном?
Пока проверьте исправленные строки, далее разберемся с выводом строки из переменной $a... что-то там явно не соответствует допустимому вводу csptest.exe
1. Есть список в файле такого вида: »
с этим понятно, осталось только с копированием разобраться...
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 = подставлялись строки из текстового файла со списком (или еще лучше чтобы строка подставилась и удалилась в тектовом файле если нет ошибок) кстати над эти думал, писать допом все в лог, чтобы ошибки разобрать если что...
Как бы »
Пробуйте:
#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" .
Доброго дня... Хочу вернуться к данной теме...
Есть задача сделать помимо всей работы скрипта чтобы он дополнительно сравнил дату выпуска ключа и не обрабатывал его если дата меньше 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
}
}
И было бы идеально еще перебор паролей сделать в команде
cmd /c """$csptest"" -keycopy -contsrc ""$_"" -pinsrc=""123456"" -contdest ""$dst\$a"" -pindest="""""
-pinsrc=""123456"" чтобы при неправльном пароле он попробывал другой который указан в переменной например.
Доброго дня... Хочу вернуться к данной теме... »
"Вспомнить всё"©фильм
:)
чтобы он дополнительно сравнил дату выпуска ключа »
непросто вспомнить о чем шла речь полгода назад, для разовой-то задачи...
Вопрос только в том, где брать эту дату выпуска ключа. Возможно, это дата из поля "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
}
}
чтобы при неправльном пароле он попробЫвал другой который указан в переменной например. »
Для этого необходимо получать код возврата от "csptest.exe" и если он возвращает какой-либо уникальный код, в случае неправильного ввода пароля, тогда можно что-нибудь будет придумать. Но, напомню: крипто про у меня не установлен, поэтому проверять и тестировать не на чем...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.