Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Крипто про он же csptest.exe (http://forum.oszone.net/showthread.php?t=341129)

ownsmir 02-07-2019 11:52 2877768

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

Ageron 02-07-2019 12:28 2877770

Цитата:

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

возьмите пустую флешку, скопируйте туда 1 один ключ, проверьте что он открывается
потом переименуйте руками, в соответствии с
Цитата:

из открытого ключа "Сертификата"
и попробуйте снова открыть этот ключ


ну и напишите, что у вас получилось потом, здесь

ownsmir 02-07-2019 13:17 2877778

Цитата:

Цитата Ageron
Цитата:
и через скрипт каждую подпись переименовать по человечески по образцу
вы уверены что после переименования, ваши ключи будут открываться?
возьмите пустую флешку, скопируйте туда 1 один ключ, проверьте что он открывается
потом переименуйте руками, в соответствии с
Цитата:
из открытого ключа "Сертификата"
и попробуйте снова открыть этот ключ
ну и напишите, что у вас получилось потом, здесь »

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

Elven 02-07-2019 15:05 2877799

Не думаю что у многих под рукой найдется какой-нибудь ненужный ключ над которым можно поиздеваться. Пока не узнаем как прочитать данные по ключу на токене и как и в какое место записать найденную информацию из командной строки - кина не будет.
Ageron, можно ключи переименовывать, это не изменяет информации в самом ключе.

Charg 02-07-2019 15:29 2877801

Что из себя представляет тот файл из которого предполагается читать информацию?

YuS_2 02-07-2019 15:31 2877802

Цитата:

Цитата ownsmir
В ручном режиме ни каких проблем не вызывает переименование названия ключа, все прекрасно работает. 1500 тысячи ключей вручную сидеть переименовывать то себе удовольствие. »

powershell умеет это делать, вот только выше верно говорят - данные необходимо получать, а вот в каком виде - вопрос насущный.
1. переименование файлов - самый простой вопрос.
2. Чтобы получить необходимое имя, в которое требуется переименовать файл, необходим пример ключей
А так, в общем случае:
powershell 6.0 и выше:
Код:

#requires -v 6.0
$arr = dir *.p12
$arr|%{
        "Введите пароль ключа $($_.fullname)"
        $pass = read-host -assec
        $cert = get-pfxcertificate $_.fullname -pass $pass
        $hash = ($cert.subject -split ',')|convertfrom-stringdata
        $name = $hash.cn
        ren $_.fullname $($name+$cert.serialnumber+$_.extension) -whatif
}

не рекомендую запускать сразу на куче файлов, тестируйте на двух-трех-четырех...

Для powershell 2.0
Код:

#requires -v 2.0
$arr = dir *.p12
$arr|%{
        "Введите пароль ключа $($_.fullname)"
        $pass = read-host -assec
        $cert = new-object system.security.cryptography.x509certificates.x509certificate2
        $cert.import(
                $_.fullname,$pass,[security.cryptography.x509certificates.x509keystorageflags]"defaultkeyset"
        )
        $hash = ($cert.subject -split ',')|convertfrom-stringdata
        $name = ($hash|?{$_.cn}).cn
        ren $_.fullname $($name+"_"+$cert.serialnumber+$_.extension) -whatif
}


ownsmir 03-07-2019 10:50 2877886

Вложений: 1
Цитата:

Цитата Charg
Что из себя представляет тот файл из которого предполагается читать информацию? »

Файл представляет собой папку на флешке в ней есть 6 файлов (прикреплю скрин) таких папок 1500+ штук.

ownsmir 03-07-2019 11:51 2877893

Как я представляю себе работу скрипта:
1. Скрипт идет на указанную флешку
2. Находит 1 папку с файлами .key
3. Считывает информацию по ЭЦП по открытому сертификату (установленному в контейнере данной папки)
4. Берет нужную информацию "Наименование организации", "дата выдачи", "Наименование организации выдавшей данную подпись" (Тензор, Контур, Астрал и т.д.)
5. Копирует данную ЭЦП на другую флешку с новым именем по максе "ООО Ромашка 01.01.2018 Тензор"
6. Переходит к следующей папке и т.д.

Можно через утилиту csptest.exe или еще если есть инструменты.
Я пытался уже через CMD и csptest сделать часть данных действий, но это если через txt файл тупо копировать переставив в нужном порядке название ключа исходное. Но не все ключи назваются понятно, как залезть в сертификат ключа через csptest я так и не нашел команду... По этому обратился к Вам, знающим больше моего

Цитата:

Цитата YuS_2
Сообщения: 385
Благодарности: 149
Профиль | Отправить PM | Цитировать
Цитата ownsmir:
В ручном режиме ни каких проблем не вызывает переименование названия ключа, все прекрасно работает. 1500 тысячи ключей вручную сидеть переименовывать то себе удовольствие. »
powershell умеет это делать, вот только выше верно говорят - данные необходимо получать, а вот в каком виде - вопрос насущный.
1. переименование файлов - самый простой вопрос.
2. Чтобы получить необходимое имя, в которое требуется переименовать файл, необходим пример ключей
А так, в общем случае:
powershell 6.0 и выше:
Код:
#requires -v 6.0
$arr = dir *.p12
$arr|%{
"Введите пароль ключа $($_.fullname)"
$pass = read-host -assec
$cert = get-pfxcertificate $_.fullname -pass $pass
$hash = ($cert.subject -split ',')|convertfrom-stringdata
$name = $hash.cn
ren $_.fullname $($name+$cert.serialnumber+$_.extension) -whatif
}
не рекомендую запускать сразу на куче файлов, тестируйте на двух-трех-четырех...
Для powershell 2.0
Код:
#requires -v 2.0
$arr = dir *.p12
$arr|%{
"Введите пароль ключа $($_.fullname)"
$pass = read-host -assec
$cert = new-object system.security.cryptography.x509certificates.x509certificate2
$cert.import(
$_.fullname,$pass,[security.cryptography.x509certificates.x509keystorageflags]"defaultkeyset"
)
$hash = ($cert.subject -split ',')|convertfrom-stringdata
$name = ($hash|?{$_.cn}).cn
ren $_.fullname $($name+"_"+$cert.serialnumber+$_.extension) -whatif
} »

Можно как то убрать проверку пароля? Они без пароля все

YuS_2 03-07-2019 12:02 2877897

Цитата:

Цитата ownsmir
Файл представляет собой папку на флешке в ней есть 6 файлов (прикреплю скрин) таких папок 1500+ штук. »

Вопрос был про содержание, а не про место хранения.

Цитата:

Цитата ownsmir
Но не все ключи назваются понятно, как залезть в сертификат ключа через csptest я так и не нашел команду... По этому обратился к Вам, знающим больше моего »

"Чтобы продать что-нибудь ненужное, надо сначала купить что-нибудь ненужное..."
Если вы покажете, какой-нибудь ненужный ключик, ответ получите гораздо быстрее...
И да, алгоритмы составлять не требуется, если вы считаете, что обращаетесь к знающим людям... знающие сами умеют это делать. :)

Ageron 03-07-2019 12:08 2877900

Цитата:

Цитата ownsmir
как залезть в сертификат ключа через csptest я так и не нашел команду... »

Скрытый текст

CSPTEST key set manipulation options:
<globals>:
-silent Do not display any user interface
--cplevel[=<number>] Apply 0/1/2/3 as <number> to use Crypt/CP/CPC/Emu interfaces
--cpdll <Dll> Apply full path to dll as <Dll>
-threads <N> Create N threads
-passes <K> Make K passes in each thread
-provider <name> [optional] specify provider name or next abbreviation:
cp2001 ph2001
-provtype <type> [optional] specify provider type or next abbreviation:
gost2001
<commands>:
-newkeyset Create new container and a key set
-addkeypair Create new keypair in existing container
-deletekeyset Delete key set
-info Show provider's info
--check[=<mask>] Check container. Use bit mask (all tests by default):
1: remask check
2: keys and certs check
4: header check
8: cert license
-hash <hashalg> Hash in file data with hash
(SHA1, SHA256, SHA384, SHA512, MD5, MD2, MD4,
GOST12_256, GOST12_512, GOST94_256 - default)
-sign <hashalg> Sign in file with private key and hash
(SHA1, SHA256, SHA384, SHA512, MD5, MD2, MD4,
GOST12_256, GOST12_512, GOST94_256 - default)
-verify <hashalg> Verify file with signature file on imported key with hash
(SHA1, SHA256, SHA384, SHA512, MD5, MD2, MD4,
GOST12_256, GOST12_512, GOST94_256 - default)
-pkverify <alg> Verify file with signature file on private key with hash
(SHA1, SHA256, SHA384, SHA512, MD5, MD2, MD4
GOST12_256, GOST12_512, GOST94_256 - default)
-display Send hashed data into Reader/Carrier
Working only with GOST hash algorithm
-enum_containers Enumerate containers
-crc Calculate CRC16 of container name string
-encryptioncarrier Set container encryption carrier
-export <file> Export public key blob into file
-expcert <file> Save key certificate from container into file
-impcert <file> Load key certificate from file into container
-makecert Make self signed cert and put it in container
-fmakecert <file> Make self signed cert and put it in file
-loadext <file> Load container extensions from PKCS#7 file, keytype option
selects signature or exchange trust store extension
-saveext <file> Save container extensions to PKCS#7 file
-cleanext <OID> Clean out container extension
"*" means delete all extensions
-noext Do not show info about container extensions
-stress CP{Acquire/Relase}Context
-help Print this help
<options>:
-verifycontext Open context for verification only
-container <name> Specify container name. Use "default" for select dialog
-unique Output unique container name instead name
-fqcn Output FQCN (Fully Qualified Container Name)
-machinekeyset Open HKLM
-exportable Generate exportable key
-protected Generate protected key
-default_optional Set CRYPT_DEFAULT_CONTAINER_OPTIONAL flag
-pattern <string> Substring in unique container name
-keytype <type> Key type for creating key and certificate, signing or
exporting public key, intended signature verifying
on private key: signature, exchange, uec, none.
Default: signature and exchange
-hashout <file> Out hash value into filename
-in <file> Data filename to be signed, verified or hashed
-out <file> Save signature in file
-signature <file> In/out signature file name
-certificate <file> Cert file to import public key from
-import <file> Import public key from file (see also: "-pubkey" parameter)
-pubkey <file> Additional public key to be used in ImportKey() as hPubKey
(exchange private key will be used with import as hPubKey
if no file specified and keytype is exchange)
-hard_rng Use hardware RNG
-length <keylen> Set key length to 1024 / 512 bits
-password <pin> Open container with this password
-nullpasswd Set NULL password (i.e. clean from cache)
-counter <num> Number of Acquire/Release context iterations
-waitcarrier <t> Wait t seconds before releasing
encryption carrier container


покажите формат вывода контейнеров с ключами

csptest -keyset -enum_containers -fqcn -verifycontext

ownsmir 03-07-2019 12:18 2877902

Цитата:

Цитата Ageron
покажите формат вывода контейнеров с ключами
csptest -keyset -enum_containers -fqcn -verifycontext »

\\.\FAT12_F\d9eebaf9-ba20-4a2e-9480-2490f976b2f5
\\.\FAT12_F\d31d043b-6368-411b-91c2-9d479d67e9b1
\\.\FAT12_F\ea67cde7-2a3e-4f24-afe4-5553b6290b13
\\.\FAT12_F\82176ef9-076e-4661-bf70-4f035307ea54
\\.\FAT12_F\73a78cad-2b53-47df-bc9a-c12959ee5ad5
\\.\FAT12_F\d232b854-0356-4cc4-b51f-9b5eda1edf6a
\\.\FAT12_F\76a5248e-6d98-4400-a7c4-766d7013c1fd
\\.\FAT12_F\83dce872-d49f-45d6-8761-9be05d915fe5
\\.\FAT12_F\53dfc883-8f5d-4cef-bce4-4ed0737fcf40
\\.\FAT12_F\77456a81-4b90-46b5-b276-147a4507d8a7
\\.\FAT12_F\62ed7b12-33d6-42b6-8774-ecac899a06ba
\\.\FAT12_F\e2a52506-f46a-449c-8e04-7a10e6d4e6aa
\\.\FAT12_F\cef3154b-5890-4614-8932-a2c73ea845bc
\\.\FAT12_F\370415f5-9085-4582-b57c-bf746947a814
\\.\FAT12_F\86ba2ee2-c1ab-4e3a-b750-94cd57b6f1d5
\\.\FAT12_F\99296548-3222-4f15-ada7-79d6bf8283ad

ownsmir 03-07-2019 12:55 2877909

С форума Крипто Про подсказали команду просмотра данных ключа
certmgr -list -cont "cont_name"
В командной строке вся нужна инфа есть, как то автоматически ее можно выбрать из нужных полей?
каждая инфа обозначена "О=***", "CN=****", "Not valid before : 24/07/2018 13:43:01 UTC"
их можно (эти 3 пункта) вывести в файл в формате "Исходное название ключа = "Значение CN=****" "Значение О=****" "Значение Not valid before :24.07.2018"
И после подставить в команду csptest.exe -keycopy -src "\\.\FAT12_F\1f4caf5dcd5746218c2d13d961cc323d" -dest "\\.\FAT12_G\"То что после = из файла?" -pindest=""

YuS_2 03-07-2019 12:57 2877910

Цитата:

Цитата ownsmir
Можно как то убрать проверку пароля? Они без пароля все »

Да можно конечно, но вопрос в том, что это пример для ЭЦП физ.лица, который был у меня под рукой. Содержимое ваших ключей может быть другим...
Пароль убрать так:
Код:

#requires -v 5.0
$arr = dir *.key
$arr|%{
        #"Введите пароль ключа $($_.fullname)"
        #$pass = read-host -assec
        $cert = get-pfxcertificate $_.fullname #-pass $pass
        $hash = ($cert.subject -split ',')|convertfrom-stringdata
        $name = $hash.cn
        ren $_.fullname $($name+$cert.serialnumber+$_.extension) -whatif
}

Цитата:

Цитата ownsmir
их можно (эти 3 пункта) вывести в файл в формате »

можно всё, что не запрещено :)

Цитата:

Цитата ownsmir
"CN=****" »

Цитата:

Цитата YuS_2
$name = $hash.cn »


ownsmir 03-07-2019 13:03 2877912

Цитата:

Цитата YuS_2
Да можно конечно, но вопрос в том, что это пример для ЭЦП физ.лица, который был у меня под рукой. Содержимое ваших ключей может быть другим...
Пароль убрать так:
Код:
#requires -v 5.0
$arr = dir *.key
$arr|%{
#"Введите пароль ключа $($_.fullname)"
#$pass = read-host -assec
$cert = get-pfxcertificate $_.fullname #-pass $pass
$hash = ($cert.subject -split ',')|convertfrom-stringdata
$name = $hash.cn
ren $_.fullname $($name+$cert.serialnumber+$_.extension) -whatif
}
Цитата ownsmir:
их можно (эти 3 пункта) вывести в файл в формате »
можно всё, что не запрещено
Цитата ownsmir:

Все равно выходит окно ввода PS((
"CN=****" »
Цитата YuS_2:
$name = $hash.cn » »


ownsmir 03-07-2019 13:38 2877922

С форума Крипто Про подсказали команду просмотра данных ключа
certmgr -list -cont "cont_name"
В командной строке вся нужна инфа есть, как то автоматически ее можно выбрать из нужных полей?
каждая инфа обозначена "О=***", "CN=****", "Not valid before : 24/07/2018 13:43:01 UTC"
их можно (эти 3 пункта) вывести в файл в формате "Исходное название ключа = "Значение CN=****" "Значение О=****" "Значение Not valid before :24.07.2018"
И после подставить в команду csptest.exe -keycopy -src "\\.\FAT12_F\1f4caf5dcd5746218c2d13d961cc323d" -dest "\\.\FAT12_G\"То что после = из файла?" -pindest=""

Или без вывода в файл из предыдущей команды можно эти данные отфильтроватьи подставить?

Цитата:

Цитата YuS_2
Да можно конечно, но вопрос в том, что это пример для ЭЦП физ.лица, который был у меня под рукой. Содержимое ваших ключей может быть другим...
Пароль убрать так:
Код:
#requires -v 5.0
$arr = dir *.key
$arr|%{
#"Введите пароль ключа $($_.fullname)"
#$pass = read-host -assec
$cert = get-pfxcertificate $_.fullname #-pass $pass
$hash = ($cert.subject -split ',')|convertfrom-stringdata
$name = $hash.cn
ren $_.fullname $($name+$cert.serialnumber+$_.extension) -whatif
}
Цитата ownsmir:
их можно (эти 3 пункта) вывести в файл в формате »
можно всё, что не запрещено
Цитата ownsmir:
"CN=****" »
Цитата YuS_2:
$name = $hash.cn » »

Вот что получается

PS C:\Windows\system32> #requires -v 5.0
$arr = dir D:\2018-05-.000\*.key
$arr|%{
#"Введите пароль ключа $($_.fullname)"
#$pass = read-host -assec
$cert = get-pfxcertificate $_.fullname #-pass $pass
$hash = ($cert.subject -split ',')|convertfrom-stringdata
$name = $hash.cn
ren $_.fullname $($name+$cert.serialnumber+$_.extension) -whatif
}
Введите пароль:
get-pfxcertificate : Требуемый объект не найден.
строка:6 знак:10
+ $cert = get-pfxcertificate $_.fullname #-pass $pass
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-PfxCertificate], CryptographicException
+ FullyQualifiedErrorId : GetPfxCertificateUnknownCryptoError,Microsoft.PowerShell.Commands.GetPfxCertificateCommand

WhatIf: Выполнение операции "Переименование файла" над целевым объектом "Элемент: D:\2018-05-.000\header.key Назначение: D:\2018-05-.000\.key".
Введите пароль:
get-pfxcertificate : Требуемый объект не найден.
строка:6 знак:10
+ $cert = get-pfxcertificate $_.fullname #-pass $pass
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-PfxCertificate], CryptographicException
+ FullyQualifiedErrorId : GetPfxCertificateUnknownCryptoError,Microsoft.PowerShell.Commands.GetPfxCertificateCommand

WhatIf: Выполнение операции "Переименование файла" над целевым объектом "Элемент: D:\2018-05-.000\masks.key Назначение: D:\2018-05-.000\.key".
Введите пароль:
get-pfxcertificate : Требуемый объект не найден.
строка:6 знак:10
+ $cert = get-pfxcertificate $_.fullname #-pass $pass
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-PfxCertificate], CryptographicException
+ FullyQualifiedErrorId : GetPfxCertificateUnknownCryptoError,Microsoft.PowerShell.Commands.GetPfxCertificateCommand

WhatIf: Выполнение операции "Переименование файла" над целевым объектом "Элемент: D:\2018-05-.000\masks2.key Назначение: D:\2018-05-.000\.key".
Введите пароль:
get-pfxcertificate : Требуемый объект не найден.
строка:6 знак:10
+ $cert = get-pfxcertificate $_.fullname #-pass $pass
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-PfxCertificate], CryptographicException
+ FullyQualifiedErrorId : GetPfxCertificateUnknownCryptoError,Microsoft.PowerShell.Commands.GetPfxCertificateCommand

WhatIf: Выполнение операции "Переименование файла" над целевым объектом "Элемент: D:\2018-05-.000\name.key Назначение: D:\2018-05-.000\.key".
Введите пароль:
get-pfxcertificate : Требуемый объект не найден.
строка:6 знак:10
+ $cert = get-pfxcertificate $_.fullname #-pass $pass
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-PfxCertificate], CryptographicException
+ FullyQualifiedErrorId : GetPfxCertificateUnknownCryptoError,Microsoft.PowerShell.Commands.GetPfxCertificateCommand

WhatIf: Выполнение операции "Переименование файла" над целевым объектом "Элемент: D:\2018-05-.000\primary.key Назначение: D:\2018-05-.000\.key".
Введите пароль:
get-pfxcertificate : Требуемый объект не найден.
строка:6 знак:10
+ $cert = get-pfxcertificate $_.fullname #-pass $pass
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-PfxCertificate], CryptographicException
+ FullyQualifiedErrorId : GetPfxCertificateUnknownCryptoError,Microsoft.PowerShell.Commands.GetPfxCertificateCommand

WhatIf: Выполнение операции "Переименование файла" над целевым объектом "Элемент: D:\2018-05-.000\primary2.key Назначение: D:\2018-05-.000\.key".

ownsmir 03-07-2019 15:34 2877948

Задача изменилась:
1. командой certmgr -list -cont "\\.\FAT12_F\*****" выводится информация такого вида:
Certmgr 1.1 (c) "Crypto-Pro", 2007-2018.
program for managing certificates, CRLs and stores

=============================================================================
1-------
Issuer : E=ca@skbkontur.ru, ОГРН=1026605606620, ИНН=006663003127, C=RU, S=66 Свердловская область, L=Екатеринбург, STREET=Пр. Космонавтов д. 56, OU=Удостоверяющий центр, O="АО ""ПФ ""СКБ КОНТУР""", CN="АО ""ПФ ""СКБ КОНТУР"""
Subject : CN="Название компании""", SN=Фамилия, G=Имя Отчество, C=RU, S=77 г. Москва, L=Москва, STREET="Адрес", O="Название компании""", T=Генеральный Директор, ОГРН=**********, СНИЛС=**********, ИНН=**********, E=почта, OID********************=********-********-********, РНС ФСС=********
SHA1 Hash : ***************************************
SubjKeyID : ***************************************
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2001 (512 bits)
Not valid before : 24/07/2018 13:43:01 UTC
Not valid after : 24/07/2019 13:52:01 UTC
PrivateKey Link : Certificate from container. No link to key
CA cert URL : http://cdp.skbkontur.ru/certificates/kontur-q1-2018.crt
CA cert URL : http://cdp2.skbkontur.ru/certificate...ur-q1-2018.crt
CDP : http://cdp.skbkontur.ru/cdp/kontur-q1-2018.crl
CDP : http://cdp2.skbkontur.ru/cdp/kontur-q1-2018.crl
Extended Key Usage : *********************************
***************************************
***************************************
***************************************
***************************************
***************************************
***************************************
=============================================================================

[ErrorCode: 0x00000000]

Звездочкой * закрыл конфиденциальную информацию

Нужно записать в переменную из вывода верхней команды данные:
Subject : CN=Название компании
Not valid before : 24/07/2018
Issuer : CN=СКБ КОНТУР

и после применить данные переменные в команде:
csptest.exe -keycopy -src "\\.\FAT12_F\1f4caf5dcd5746218c2d13d961cc323d" -dest "\\.\FAT12_П\Название компании 24.07.2018 СКБ КОНТУР" -pindest=""

YuS_2 03-07-2019 21:43 2878023

Цитата:

Цитата ownsmir
Вот что получается »

файлы .key - это не сам сертификат
поэтому на попытку считывания командлетом не подходящих данных, вываливается соответствующая ошибка ...

Цитата:

Цитата ownsmir
командой certmgr -list -cont "\\.\FAT12_F\*****" выводится информация такого вида: »

предполагаю, что в контейнере находится сам сертификат, который и читает certmgr...
Выковыривать информацию из вывода в консоль cmd, дело неблагодарное, хоть и не безнадежное...
Всё же, предлагаю воспользоваться powershell-ом для получения данных сертификата.
Код:

$cert = get-pfxcertificate f:\исходное_наименование_каталога\имя_сертификата.cer
$hashsubject = ($cert.subject -split ',')|convertfrom-stringdata
$hashissuer = ($cert.issuer -split ',')|convertfrom-stringdata

и далее:
Цитата:

Цитата ownsmir
Нужно записать в переменную из вывода верхней команды данные:
Subject : CN=Название компании
Not valid before : 24/07/2018
Issuer : CN=СКБ КОНТУР »

можем все это получить:
Код:

$name_date = "{0:dd.MM.yyyy}" -f $cert.notbefore
$name1 = $hashsubject.cn
$name2 = $hashissuer.cn
$new_name = $name1 + $name_date + $name2
ren f:\исходное_наименование_каталога $new_name -whatif

можно всё это автоматизировать, главное получить принципиальную работоспособность на примере...

ownsmir 04-07-2019 10:26 2878095

[q=YuS_2]$cert = get-pfxcertificate f:\исходное_наименование_каталога\имя_сертификата.cer
$hashsubject = ($cert.subject -split ',')|convertfrom-stringdata
$hashissuer = ($cert.issuer -split ',')|convertfrom-stringdata »

Получается в папке с ключем должен быть сертификат .cer?
Его же там нет...
Мне не файлы нужно переименовать, мне нужно изменить дружественное название ключей чтобы в криптро про они отображались по образцу "Ромашка, ООО от 13.01.2019 СКБ Контур". Файлы на флешке мне вообще трогать не нужно. Про файлы я писал не зная откуда можно взять информацию о ключе.

YuS_2 04-07-2019 15:47 2878162

Цитата:

Цитата ownsmir
Получается в папке с ключем должен быть сертификат .cer?
Его же там нет... »

Сертификат в криптоконтейнере неизвлекаемый, но он там есть и без криптопро прочесть его проблематично, поэтому видимо придется таки разбирать cmd консольный вывод...

ownsmir 04-07-2019 15:54 2878165

Цитата:

Цитата YuS_2
Сертификат в криптоконтейнере неизвлекаемый, но он там есть и без криптопро прочесть его проблематично, поэтому видимо придется таки разбирать cmd консольный вывод... »

Эх... Да

Больше никто не реагирует к сожалению(((
Сколько в интернете прочитал, толком не могу найти информацию как правильно взять определенную информацию и потом ее использовать.

YuS_2 04-07-2019 20:07 2878207

Цитата:

Цитата 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_П »

- это правильно указано в Вашей строке?

ownsmir 04-07-2019 20:44 2878212

Цитата:

Цитата 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

YuS_2 04-07-2019 21:08 2878216

Цитата:

Цитата 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... в общем, пробуйте.

ownsmir 05-07-2019 09:28 2878259

Цитата:

Цитата 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="""""


YuS_2 05-07-2019 10:27 2878265

Цитата:

Цитата 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="""""

хотя это, теоретически, на результат влиять не должно...

ownsmir 05-07-2019 10:35 2878267

Цитата:

Цитата 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


YuS_2 05-07-2019 10:52 2878269

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

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

ownsmir 05-07-2019 11:47 2878279

Цитата:

Цитата 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

YuS_2 05-07-2019 12:52 2878292

Цитата:

Цитата ownsmir
Он ругается на первую команду »

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

Цитата:

Цитата ownsmir
Причем эту первую отработала без ошибок »

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

ЗЫ
есть предположение, что в этих символах присутствует запятая, поэтому, чтобы строка не "ломалась", мы такие запятые можем просто удалять.
Замените две строки на такие:
Код:

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


YuS_2 05-07-2019 15:22 2878322

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

ownsmir 05-07-2019 15:36 2878324

Цитата:

Цитата 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]


YuS_2 05-07-2019 17:39 2878347

Цитата:

Цитата 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. Есть список в файле такого вида: »

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

ownsmir 06-07-2019 10:57 2878424

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

YuS_2 06-07-2019 12:49 2878451

Цитата:

Цитата 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" .

ownsmir 17-12-2019 15:11 2900910

Доброго дня... Хочу вернуться к данной теме...
Есть задача сделать помимо всей работы скрипта чтобы он дополнительно сравнил дату выпуска ключа и не обрабатывал его если дата меньше 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 17-12-2019 15:55 2900916

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

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

YuS_2 18-12-2019 09:30 2901012

Цитата:

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


Время: 07:30.

Время: 07:30.
© OSzone.net 2001-