Статус: Новичок
  Группы: Участники
 Зарегистрирован: 14.08.2023(UTC) Сообщений: 5   
	 
	
     | 
    
        
            
		      
                Добрый день!
  Подскажите, пожалуйста, каким образом организовать автоматическую установку и подвязку сертификатов к контейнерам через консольные утилиты (Windows 10)?
  Нашел вариант через csptest -absorb -certs, он работает, но требуется чтобы сертификаты были установлены в контейнер. Но есть ли вариант чтобы можно было указать папку с сертификатами и флэшку с контейнерами, и чтобы утилита сама связала эти сертификаты с контейнерами на флэшке? 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 31.05.2016(UTC) Сообщений: 2,874
  Сказал(а) «Спасибо»: 657 раз Поблагодарили: 508 раз в 479 постах
  
	 
	
     | 
    
        
            
		      
                А если скопировать сертификаты на флэшку с контейнерами? Или, как вариант, в: Код:%userprofile%\AppData\Local\Crypto Pro\ 
 Отредактировано пользователем 14 августа 2023 г. 20:28:55(UTC)
 | Причина: Не указана  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 05.07.2018(UTC) Сообщений: 468
  Сказал(а) «Спасибо»: 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) Сообщений: 468
  Сказал(а) «Спасибо»: 43 раз Поблагодарили: 69 раз в 61 постах
  
	 
	
     | 
    
         | 
 | 
            
	 
        
    
    
        
              1 пользователь поблагодарил TolikTipaTut1 за этот пост.  
     | 
    
        
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Новичок
  Группы: Участники
 Зарегистрирован: 14.08.2023(UTC) Сообщений: 5   
	 
	
     | 
    
        
            
		      
                Автор: TolikTipaTut1   Запустил скрипт, ошибки повылазили    err1.png  (25kb) загружен 11 раз(а).  err2.png  (45kb) загружен 8 раз(а).В чём беда?  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 05.07.2018(UTC) Сообщений: 468
  Сказал(а) «Спасибо»: 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