Статус: Новичок
Группы: Участники
Зарегистрирован: 14.08.2023(UTC) Сообщений: 5
|
Добрый день!
Подскажите, пожалуйста, каким образом организовать автоматическую установку и подвязку сертификатов к контейнерам через консольные утилиты (Windows 10)?
Нашел вариант через csptest -absorb -certs, он работает, но требуется чтобы сертификаты были установлены в контейнер. Но есть ли вариант чтобы можно было указать папку с сертификатами и флэшку с контейнерами, и чтобы утилита сама связала эти сертификаты с контейнерами на флэшке?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 31.05.2016(UTC) Сообщений: 1,844
Сказал(а) «Спасибо»: 455 раз Поблагодарили: 312 раз в 294 постах
|
А если скопировать сертификаты на флэшку с контейнерами? Или, как вариант, в: Код:%userprofile%\AppData\Local\Crypto Pro\
Отредактировано пользователем 14 августа 2023 г. 20:28:55(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 05.07.2018(UTC) Сообщений: 467
Сказал(а) «Спасибо»: 43 раз Поблагодарили: 69 раз в 61 постах
|
Интересная задачка Предположим, что нам пришли контейнеры без сертов, в серты а отдельной папочке. Ставить их в хранилище в лом... Написал тяп-ляп скрипт, который находит для сертов подходящие контейнеры и ставит их туда. За основу взял эту статью на хабре. Из нее выясняем, что в контейнере ключа ЭП хранятся байты открытого ключа ЭП, что поможет нам в поиске нужных контейнеров. Сам скрипт: Код:Add-Type -Path .\BouncyCastle.Cryptography.dll
$path_to_conts_dir = Read-Host -Prompt "Укажите путь до директорий с контейнерами"
# $path_to_conts_dir = "$($env:USERPROFILE)\AppData\Local\Crypto Pro\"
$path_to_certs_dir = Read-Host -Prompt "Укажите путь до директорий с сертификатами"
# $path_to_certs_dir = ".\certs"
$certsData = @{}
gci -Recurse -Path $path_to_certs_dir | % {
$certPath = $_.FullName
$certPbk = [Org.BouncyCastle.X509.X509Certificate]::new((gc -AsByteStream:$true -Path $certPath)).GetPublicKey().Q.XCoord.GetEncoded()[24..31]
[array]::Reverse($certPbk)
$certsData.Add([System.Convert]::ToHexString($certPbk), $certPath)
}
gci -Recurse -Path $path_to_conts_dir -File:$true | ? {$_.FullName -match "header.key"} | % {
$pbkSample = [System.Convert]::ToHexString([Org.BouncyCastle.Asn1.DerOctetString]::FromByteArray(([Org.BouncyCastle.Asn1.DerSequence]::FromByteArray([Org.BouncyCastle.Asn1.DerSequence]::FromByteArray((gc -AsByteStream -Path $_.FullName)).Parser.ReadObject().ToAsn1Object().GetDerEncoded()) | ? {$_.TagNo -match 10})[0].GetBaseObject().GetEncoded()).GetOctets())
$namekeyfilepath = "$($_.FullName | Split-Path -Parent)\name.key"
$namekey = [Org.BouncyCastle.Asn1.DerSequence]::FromByteArray((gc -AsByteStream -Path $namekeyfilepath))
$contname = $namekey[0].GetString()
if ($certsData.ContainsKey($pbkSample)) {
Write-Host -Object "Found suitable cert `"$($certsData."$($pbkSample)")`" for cont $($contname)"
& 'C:\Program Files\Crypto Pro\CSP\certmgr.exe' -inst -cont $contname -file $certsData."$($pbkSample)" -to-container
}
else {
Write-Host -Object "No suitable certs found for cont $($contname)"
}
}
Для запуска требуется pwsh версии 7.3.6 и выше, а также либа BC версии 2.2.1. |
|
2 пользователей поблагодарили TolikTipaTut1 за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 14.08.2023(UTC) Сообщений: 5
|
Автор: nickm А если скопировать сертификаты на флэшку с контейнерами? Или, как вариант, в: Код:%userprofile%\AppData\Local\Crypto Pro\
С локальной директорией проблемы начинаются, когда там много контейнеров лежит, поэтому ей не пользуюсь. И в целом это не поможет, написанная у меня команда с csptest читает все считыватели закрытых ключей, в т.ч. и локальную директорию. Да и все равно нужно чтобы сертификаты были вложены в контейнеры. Отредактировано пользователем 15 августа 2023 г. 9:09:48(UTC)
| Причина: Не указана
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 14.08.2023(UTC) Сообщений: 5
|
Автор: TolikTipaTut1 Интересная задачка Предположим, что нам пришли контейнеры без сертов, в серты а отдельной папочке. Ставить их в хранилище в лом... Написал тяп-ляп скрипт, который находит для сертов подходящие контейнеры и ставит их туда. За основу взял эту статью на хабре. Из нее выясняем, что в контейнере ключа ЭП хранятся байты открытого ключа ЭП, что поможет нам в поиске нужных контейнеров. Сам скрипт: Код:Add-Type -Path .\BouncyCastle.Cryptography.dll
$path_to_conts_dir = Read-Host -Prompt "Укажите путь до директорий с контейнерами"
# $path_to_conts_dir = "$($env:USERPROFILE)\AppData\Local\Crypto Pro\"
$path_to_certs_dir = Read-Host -Prompt "Укажите путь до директорий с сертификатами"
# $path_to_certs_dir = ".\certs"
$certsData = @{}
gci -Recurse -Path $path_to_certs_dir | % {
$certPath = $_.FullName
$certPbk = [Org.BouncyCastle.X509.X509Certificate]::new((gc -AsByteStream:$true -Path $certPath)).GetPublicKey().Q.XCoord.GetEncoded()[24..31]
[array]::Reverse($certPbk)
$certsData.Add([System.Convert]::ToHexString($certPbk), $certPath)
}
gci -Recurse -Path $path_to_conts_dir -File:$true | ? {$_.FullName -match "header.key"} | % {
$pbkSample = [System.Convert]::ToHexString([Org.BouncyCastle.Asn1.DerOctetString]::FromByteArray(([Org.BouncyCastle.Asn1.DerSequence]::FromByteArray([Org.BouncyCastle.Asn1.DerSequence]::FromByteArray((gc -AsByteStream -Path $_.FullName)).Parser.ReadObject().ToAsn1Object().GetDerEncoded()) | ? {$_.TagNo -match 10})[0].GetBaseObject().GetEncoded()).GetOctets())
$namekeyfilepath = "$($_.FullName | Split-Path -Parent)\name.key"
$namekey = [Org.BouncyCastle.Asn1.DerSequence]::FromByteArray((gc -AsByteStream -Path $namekeyfilepath))
$contname = $namekey[0].GetString()
if ($certsData.ContainsKey($pbkSample)) {
Write-Host -Object "Found suitable cert `"$($certsData."$($pbkSample)")`" for cont $($contname)"
& 'C:\Program Files\Crypto Pro\CSP\certmgr.exe' -inst -cont $contname -file $certsData."$($pbkSample)" -to-container
}
else {
Write-Host -Object "No suitable certs found for cont $($contname)"
}
}
Для запуска требуется pwsh версии 7.3.6 и выше, а также либа BC версии 2.2.1. PWSH обновил до нужной версии, а вот что это за либа такая, ссылку можно, пожалуйста?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 05.07.2018(UTC) Сообщений: 467
Сказал(а) «Спасибо»: 43 раз Поблагодарили: 69 раз в 61 постах
|
|
|
1 пользователь поблагодарил TolikTipaTut1 за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 14.08.2023(UTC) Сообщений: 5
|
Автор: TolikTipaTut1 Запустил скрипт, ошибки повылазили err1.png (25kb) загружен 11 раз(а). err2.png (45kb) загружен 8 раз(а).В чём беда?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 05.07.2018(UTC) Сообщений: 467
Сказал(а) «Спасибо»: 43 раз Поблагодарили: 69 раз в 61 постах
|
Автор: serghummer Автор: TolikTipaTut1 Запустил скрипт, ошибки повылазили err1.png (25kb) загружен 11 раз(а). err2.png (45kb) загружен 8 раз(а).В чём беда? у меня криптопро 5.0 r3, поэтому у вас не работает проблема с ????????? - это проблема с кириллицей, classic Код:Add-Type -Path .\BouncyCastle.Cryptography.dll
# $path_to_conts_dir = Read-Host -Prompt "Укажите путь до директорий с контейнерами"
$path_to_conts_dir = "$($env:USERPROFILE)\AppData\Local\Crypto Pro\"
# $path_to_certs_dir = Read-Host -Prompt "Укажите путь до директорий с сертификатами"
$path_to_certs_dir = ".\certs"
$certsData = @{}
gci -Recurse -Path $path_to_certs_dir | % {
$certPath = $_.FullName
$certPbk = [Org.BouncyCastle.X509.X509Certificate]::new((gc -AsByteStream:$true -Path $certPath)).GetPublicKey().Q.XCoord.GetEncoded()[24..31]
[array]::Reverse($certPbk)
$certsData.Add([System.Convert]::ToHexString($certPbk), $certPath)
}
gci -Recurse -Path $path_to_conts_dir -File:$true | ? {$_.FullName -match "header.key"} | % {
$pbkSample = [System.Convert]::ToHexString([Org.BouncyCastle.Asn1.DerOctetString]::FromByteArray(([Org.BouncyCastle.Asn1.DerSequence]::FromByteArray([Org.BouncyCastle.Asn1.DerSequence]::FromByteArray((gc -AsByteStream -Path $_.FullName)).Parser.ReadObject().ToAsn1Object().GetDerEncoded()) | ? {$_.TagNo -match 10})[0].GetBaseObject().GetEncoded()).GetOctets())
$namekeyfilepath = "$($_.FullName | Split-Path -Parent)\name.key"
$namekey = [Org.BouncyCastle.Asn1.DerSequence]::FromByteArray((gc -AsByteStream -Path $namekeyfilepath))
$contname = [System.Text.Encoding]::GetEncoding(1251).GetString($namekey[0].GetOctets())
if ($certsData.ContainsKey($pbkSample)) {
Write-Host -Object "Found suitable cert `"$($certsData."$($pbkSample)")`" for cont $($contname)"
& 'C:\Program Files\Crypto Pro\CSP\certmgr.exe' -inst -cont $contname -file $certsData."$($pbkSample)" -to-container
}
else {
Write-Host -Object "No suitable certs found for cont $($contname)"
}
}
Я понял, что вы сделали, у вас все в одной директории. Переместите серты в одну директорию, а контейнеры в другую. И такой проблемы не будет Отредактировано пользователем 15 августа 2023 г. 11:17:29(UTC)
| Причина: Не указана |
|
1 пользователь поблагодарил TolikTipaTut1 за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 14.08.2023(UTC) Сообщений: 5
|
Автор: TolikTipaTut1 Автор: serghummer Автор: TolikTipaTut1 Запустил скрипт, ошибки повылазили err1.png (25kb) загружен 11 раз(а). err2.png (45kb) загружен 8 раз(а).В чём беда? у меня криптопро 5.0 r3, поэтому у вас не работает проблема с ????????? - это проблема с кириллицей, classic Код:Add-Type -Path .\BouncyCastle.Cryptography.dll
# $path_to_conts_dir = Read-Host -Prompt "Укажите путь до директорий с контейнерами"
$path_to_conts_dir = "$($env:USERPROFILE)\AppData\Local\Crypto Pro\"
# $path_to_certs_dir = Read-Host -Prompt "Укажите путь до директорий с сертификатами"
$path_to_certs_dir = ".\certs"
$certsData = @{}
gci -Recurse -Path $path_to_certs_dir | % {
$certPath = $_.FullName
$certPbk = [Org.BouncyCastle.X509.X509Certificate]::new((gc -AsByteStream:$true -Path $certPath)).GetPublicKey().Q.XCoord.GetEncoded()[24..31]
[array]::Reverse($certPbk)
$certsData.Add([System.Convert]::ToHexString($certPbk), $certPath)
}
gci -Recurse -Path $path_to_conts_dir -File:$true | ? {$_.FullName -match "header.key"} | % {
$pbkSample = [System.Convert]::ToHexString([Org.BouncyCastle.Asn1.DerOctetString]::FromByteArray(([Org.BouncyCastle.Asn1.DerSequence]::FromByteArray([Org.BouncyCastle.Asn1.DerSequence]::FromByteArray((gc -AsByteStream -Path $_.FullName)).Parser.ReadObject().ToAsn1Object().GetDerEncoded()) | ? {$_.TagNo -match 10})[0].GetBaseObject().GetEncoded()).GetOctets())
$namekeyfilepath = "$($_.FullName | Split-Path -Parent)\name.key"
$namekey = [Org.BouncyCastle.Asn1.DerSequence]::FromByteArray((gc -AsByteStream -Path $namekeyfilepath))
$contname = [System.Text.Encoding]::GetEncoding(1251).GetString($namekey[0].GetOctets())
if ($certsData.ContainsKey($pbkSample)) {
Write-Host -Object "Found suitable cert `"$($certsData."$($pbkSample)")`" for cont $($contname)"
& 'C:\Program Files\Crypto Pro\CSP\certmgr.exe' -inst -cont $contname -file $certsData."$($pbkSample)" -to-container
}
else {
Write-Host -Object "No suitable certs found for cont $($contname)"
}
}
Я понял, что вы сделали, у вас все в одной директории. Переместите серты в одну директорию, а контейнеры в другую. И такой проблемы не будет Супер! Все заработало! Спасибо Вам!))
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close