Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline serghummer  
#1 Оставлено : 14 августа 2023 г. 17:16:15(UTC)
serghummer

Статус: Новичок

Группы: Участники
Зарегистрирован: 14.08.2023(UTC)
Сообщений: 5
Российская Федерация

Добрый день!

Подскажите, пожалуйста, каким образом организовать автоматическую установку и подвязку сертификатов к контейнерам через консольные утилиты (Windows 10)?

Нашел вариант через csptest -absorb -certs, он работает, но требуется чтобы сертификаты были установлены в контейнер. Но есть ли вариант чтобы можно было указать папку с сертификатами и флэшку с контейнерами, и чтобы утилита сама связала эти сертификаты с контейнерами на флэшке?
Offline nickm  
#2 Оставлено : 14 августа 2023 г. 17:35:30(UTC)
nickm

Статус: Активный участник

Группы: Участники
Зарегистрирован: 31.05.2016(UTC)
Сообщений: 1,844

Сказал(а) «Спасибо»: 455 раз
Поблагодарили: 312 раз в 294 постах
А если скопировать сертификаты на флэшку с контейнерами?

Или, как вариант, в:
Код:
%userprofile%\AppData\Local\Crypto Pro\

Отредактировано пользователем 14 августа 2023 г. 20:28:55(UTC)  | Причина: Не указана

Offline TolikTipaTut1  
#3 Оставлено : 15 августа 2023 г. 0:26:28(UTC)
TolikTipaTut1

Статус: Активный участник

Группы: Участники
Зарегистрирован: 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.
thanks 2 пользователей поблагодарили TolikTipaTut1 за этот пост.
nickm оставлено 15.08.2023(UTC), Nastushka_tyta оставлено 15.08.2023(UTC)
Offline serghummer  
#4 Оставлено : 15 августа 2023 г. 9:04:26(UTC)
serghummer

Статус: Новичок

Группы: Участники
Зарегистрирован: 14.08.2023(UTC)
Сообщений: 5
Российская Федерация

Автор: nickm Перейти к цитате
А если скопировать сертификаты на флэшку с контейнерами?

Или, как вариант, в:
Код:
%userprofile%\AppData\Local\Crypto Pro\


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

И в целом это не поможет, написанная у меня команда с csptest читает все считыватели закрытых ключей, в т.ч. и локальную директорию. Да и все равно нужно чтобы сертификаты были вложены в контейнеры.

Отредактировано пользователем 15 августа 2023 г. 9:09:48(UTC)  | Причина: Не указана

Offline serghummer  
#5 Оставлено : 15 августа 2023 г. 9:07:36(UTC)
serghummer

Статус: Новичок

Группы: Участники
Зарегистрирован: 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 обновил до нужной версии, а вот что это за либа такая, ссылку можно, пожалуйста?

Offline TolikTipaTut1  
#6 Оставлено : 15 августа 2023 г. 9:09:51(UTC)
TolikTipaTut1

Статус: Активный участник

Группы: Участники
Зарегистрирован: 05.07.2018(UTC)
Сообщений: 467

Сказал(а) «Спасибо»: 43 раз
Поблагодарили: 69 раз в 61 постах
Автор: serghummer Перейти к цитате


PWSH обновил до нужной версии, а вот что это за либа такая, ссылку можно, пожалуйста?



https://www.nuget.org/pa...ouncyCastle.Cryptography

Библиотека BouncyCastle. Вам нужна собранная для .Net 6.0
thanks 1 пользователь поблагодарил TolikTipaTut1 за этот пост.
Nastushka_tyta оставлено 15.08.2023(UTC)
Offline serghummer  
#7 Оставлено : 15 августа 2023 г. 10:52:57(UTC)
serghummer

Статус: Новичок

Группы: Участники
Зарегистрирован: 14.08.2023(UTC)
Сообщений: 5
Российская Федерация

Автор: TolikTipaTut1 Перейти к цитате
Автор: serghummer Перейти к цитате


PWSH обновил до нужной версии, а вот что это за либа такая, ссылку можно, пожалуйста?



https://www.nuget.org/pa...ouncyCastle.Cryptography

Библиотека BouncyCastle. Вам нужна собранная для .Net 6.0


Запустил скрипт, ошибки повылазили err1.png (25kb) загружен 11 раз(а). err2.png (45kb) загружен 8 раз(а).

В чём беда?

Offline TolikTipaTut1  
#8 Оставлено : 15 августа 2023 г. 11:04:30(UTC)
TolikTipaTut1

Статус: Активный участник

Группы: Участники
Зарегистрирован: 05.07.2018(UTC)
Сообщений: 467

Сказал(а) «Спасибо»: 43 раз
Поблагодарили: 69 раз в 61 постах
Автор: serghummer Перейти к цитате
Автор: TolikTipaTut1 Перейти к цитате
Автор: serghummer Перейти к цитате


PWSH обновил до нужной версии, а вот что это за либа такая, ссылку можно, пожалуйста?



https://www.nuget.org/pa...ouncyCastle.Cryptography

Библиотека BouncyCastle. Вам нужна собранная для .Net 6.0


Запустил скрипт, ошибки повылазили 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)  | Причина: Не указана

thanks 1 пользователь поблагодарил TolikTipaTut1 за этот пост.
Nastushka_tyta оставлено 15.08.2023(UTC)
Offline serghummer  
#9 Оставлено : 15 августа 2023 г. 12:02:42(UTC)
serghummer

Статус: Новичок

Группы: Участники
Зарегистрирован: 14.08.2023(UTC)
Сообщений: 5
Российская Федерация

Автор: TolikTipaTut1 Перейти к цитате
Автор: serghummer Перейти к цитате
Автор: TolikTipaTut1 Перейти к цитате
Автор: serghummer Перейти к цитате


PWSH обновил до нужной версии, а вот что это за либа такая, ссылку можно, пожалуйста?



https://www.nuget.org/pa...ouncyCastle.Cryptography

Библиотека BouncyCastle. Вам нужна собранная для .Net 6.0


Запустил скрипт, ошибки повылазили 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)"
    }
}


Я понял, что вы сделали, у вас все в одной директории. Переместите серты в одну директорию, а контейнеры в другую. И такой проблемы не будет


Супер! Все заработало!

Спасибо Вам!))
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.