![]() |
Крипто про он же csptest.exe
Здравствуйте! Уважаемые умы!
У меня по работе очень много разных эцп, от разных УЦ. Соответственно каждый УЦ при формировании ключа, обзывает его по своему, а зачастую это выглядит вот так "iojng-er4gedfgv-454g-45g45g" и т.д. Ну в общем все ключи называются по разному, бухгалтера несчастные по пол часа ищут нужное ЭЦП для работы с компанией по отчетности. Смысл все темы таков, хочу взять все ключи на флешке (их порядка 1500) и через скрипт каждую подпись переименовать по человечески по образцу (НО информацию о ключе нужно брать из открытого ключа "Сертификата" т.к. актуальная и полная информация только там) образец "Ромашка, ООО от 13.01.2019 СКБ Контур" есть ли такая возможность? |
Цитата:
возьмите пустую флешку, скопируйте туда 1 один ключ, проверьте что он открывается потом переименуйте руками, в соответствии с Цитата:
ну и напишите, что у вас получилось потом, здесь |
Цитата:
|
Не думаю что у многих под рукой найдется какой-нибудь ненужный ключ над которым можно поиздеваться. Пока не узнаем как прочитать данные по ключу на токене и как и в какое место записать найденную информацию из командной строки - кина не будет.
Ageron, можно ключи переименовывать, это не изменяет информации в самом ключе. |
Что из себя представляет тот файл из которого предполагается читать информацию?
|
Цитата:
1. переименование файлов - самый простой вопрос. 2. Чтобы получить необходимое имя, в которое требуется переименовать файл, необходим пример ключей А так, в общем случае: powershell 6.0 и выше: Код:
#requires -v 6.0 Для powershell 2.0 Код:
#requires -v 2.0 |
Вложений: 1
Цитата:
|
Как я представляю себе работу скрипта:
1. Скрипт идет на указанную флешку 2. Находит 1 папку с файлами .key 3. Считывает информацию по ЭЦП по открытому сертификату (установленному в контейнере данной папки) 4. Берет нужную информацию "Наименование организации", "дата выдачи", "Наименование организации выдавшей данную подпись" (Тензор, Контур, Астрал и т.д.) 5. Копирует данную ЭЦП на другую флешку с новым именем по максе "ООО Ромашка 01.01.2018 Тензор" 6. Переходит к следующей папке и т.д. Можно через утилиту csptest.exe или еще если есть инструменты. Я пытался уже через CMD и csptest сделать часть данных действий, но это если через txt файл тупо копировать переставив в нужном порядке название ключа исходное. Но не все ключи назваются понятно, как залезть в сертификат ключа через 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 |
Цитата:
\\.\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 |
С форума Крипто Про подсказали команду просмотра данных ключа
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="" |
Цитата:
Пароль убрать так: Код:
#requires -v 5.0 Цитата:
Цитата:
Цитата:
|
Цитата:
|
С форума Крипто Про подсказали команду просмотра данных ключа
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="" Или без вывода в файл из предыдущей команды можно эти данные отфильтроватьи подставить? Цитата:
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". |
Задача изменилась:
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="" |
Цитата:
поэтому на попытку считывания командлетом не подходящих данных, вываливается соответствующая ошибка ... Цитата:
Выковыривать информацию из вывода в консоль cmd, дело неблагодарное, хоть и не безнадежное... Всё же, предлагаю воспользоваться powershell-ом для получения данных сертификата. Код:
$cert = get-pfxcertificate f:\исходное_наименование_каталога\имя_сертификата.cer Цитата:
Код:
$name_date = "{0:dd.MM.yyyy}" -f $cert.notbefore |
[q=YuS_2]$cert = get-pfxcertificate f:\исходное_наименование_каталога\имя_сертификата.cer
$hashsubject = ($cert.subject -split ',')|convertfrom-stringdata $hashissuer = ($cert.issuer -split ',')|convertfrom-stringdata » Получается в папке с ключем должен быть сертификат .cer? Его же там нет... Мне не файлы нужно переименовать, мне нужно изменить дружественное название ключей чтобы в криптро про они отображались по образцу "Ромашка, ООО от 13.01.2019 СКБ Контур". Файлы на флешке мне вообще трогать не нужно. Про файлы я писал не зная откуда можно взять информацию о ключе. |
Цитата:
|
Цитата:
Больше никто не реагирует к сожалению((( Сколько в интернете прочитал, толком не могу найти информацию как правильно взять определенную информацию и потом ее использовать. |
Цитата:
Попробуем с помощью того же powershell script.ps1 Код:
#requires -v 3.0 Особенно следует обратить внимание на путь к контейнеру и отрабатывание команд содержащих запуск cmd. Цитата:
|
Цитата:
Не в cmd идет а приложение запускает Цитата:
|
Цитата:
Тогда надо вместо certmgr, указать полный путь к менеджеру криптопро: Код:
'С:\путь_к_ менеджеру_крипто_про\certmgr.exe' Цитата:
ЗЫ Код выше поправил немного, но имя контейнера, пути к менеджеру и букву носителя указывайте свои, естественно... Однако, судя по всему, то, что Вы желаете получить, возможно, не поддерживается: Цитата:
|
Цитата:
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 |
Цитата:
Код:
#requires -v 3.0 Ну и на всякий случай, в полном коде, завернем в скобки: Код:
#requires -v 3.0 |
Цитата:
Код:
PS C:\Windows\system32> #requires -v 3.0 |
|
Цитата:
Код:
#requires -v 3.0 Код:
$subject = ($str[1].p2 -split ',')|convertfrom-stringdata Код:
$issuer = ($str[0].p2 -split ',')|convertfrom-stringdata |
Цитата:
Цитата:
Покажите то, что скрыто под звездами, причем полностью все символы, кроме букв, их можно скрыть. ЗЫ есть предположение, что в этих символах присутствует запятая, поэтому, чтобы строка не "ломалась", мы такие запятые можем просто удалять. Замените две строки на такие: Код:
$issuer = (($str[0].p2 -replace ',(?=[^=,]*,)') -split ',')|convertfrom-stringdata |
Если код работает теперь, то его надо привести к автоматизации. Для этого необходимо определиться с этим:
1. Способ получения списка криптоконтейнеров. Для его создания используется определенная команда или же он собирается вручную? В общем, необходимо выбрать способ передачи списка в powershell. 2. Работает ли копирование контейнеров через csptest.exe, в принципе? Ошибка вываливается на некоторых контейнерах или на всех подряд? - определимся с этими вопросами, тогда сделаю окончательный скрипт для копирования. |
Цитата:
Код:
PS C:\Windows\system32> $subject = (($str[1].p2 -replace ',(?=[^=,]*,)') -split ',') Надо как то удалить из вывода конец строки 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=""""" |
Цитата:
Код:
$issuer = ($str[0].p2 -replace ',(?=[^=,]*(,|$))') -split ','|convertfrom-stringdata Цитата:
Пока проверьте исправленные строки, далее разберемся с выводом строки из переменной $a... что-то там явно не соответствует допустимому вводу csptest.exe Цитата:
|
YuS_2, YuS_2, YuS_2, YuS_2, YuS_2, YuS_2, YuS_2,
Цитата:
Собственно выкладываю получившийся код на текущий момент рабочий Код:
#requires -v 3.0 1. Чтобы в $fld = подставлялись строки из текстового файла со списком (или еще лучше чтобы строка подставилась и удалилась в тектовом файле если нет ошибок) кстати над эти думал, писать допом все в лог, чтобы ошибки разобрать если что... |
Цитата:
Код:
#requires -v 3.0 |
Доброго дня... Хочу вернуться к данной теме...
Есть задача сделать помимо всей работы скрипта чтобы он дополнительно сравнил дату выпуска ключа и не обрабатывал его если дата меньше 16.12.2018 (на сегодняшний день), не подскажите как его изменить? Пробывал сам закончилось не рабочим скриптом. Использую этот код: Код:
#requires -v 3.0 |
И было бы идеально еще перебор паролей сделать в команде
Код:
cmd /c """$csptest"" -keycopy -contsrc ""$_"" -pinsrc=""123456"" -contdest ""$dst\$a"" -pindest=""""" |
Цитата:
:) Цитата:
Вопрос только в том, где брать эту дату выпуска ключа. Возможно, это дата из поля "Not valid before"? Тогда, если не ошибаюсь, требуется это: Код:
#requires -v 3.0 Цитата:
|
Время: 07:30. |
Время: 07:30.
© OSzone.net 2001-