Статус: Активный участник
Группы: Участники
Зарегистрирован: 05.07.2018(UTC) Сообщений: 467
Сказал(а) «Спасибо»: 43 раз Поблагодарили: 69 раз в 61 постах
|
Автор: TolikTipaTut1 Не уверен, что вопрос "лежит" в правильной ветке.
Протестил на Ubuntu 22.04. Как и ожидалось, лишних полей не добавляется. Можно написать в тех. поддержку, а можно попытаться решить вопрос своими силами: надо извлечь подписываемое "тело" запроса, удалить из него лишние атрибуты, после чего переподписать запрос. Я тут на досуге повеселиться решил: 1) на винде создал запрос с использованием cryptcp; 2) с использованием BouncyCastle выдрал из структуры CertificationRequestInfo все, кроме attributes; 3) с использованием BouncyCastle сформировал новую структуру CertificationRequestInfo, подписал ее ключом, созданным во время генерации запроса с использованием cryptcp; 4) с использованием BouncyCastle сформировал новый запрос на сертификат и отправил его для проверки сюды: https://www.cryptopro.ru/certsrv/certrqxt.asp.Результат: все работает ) Код:Add-Type -Path ".\BouncyCastle.dll"
$lib = @"
[DllImportAttribute("advapi32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern bool CryptAcquireContext(
ref IntPtr phProv,
string pszContainer,
string pszProvider,
int dwProvType,
Int64 dwFlags
);
[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool CryptCreateHash(
IntPtr hProv,
uint algId,
IntPtr hKey,
uint dwFlags,
ref IntPtr phHash
);
[DllImport("advapi32.dll", SetLastError = true)]
public static extern bool CryptHashData(
IntPtr hHash,
byte[] pbData,
uint dataLen,
uint flags
);
[DllImport("advapi32.dll", SetLastError = true)]
public static extern bool CryptSignHash(
IntPtr hHash,
uint keySpec,
IntPtr description,
uint flags,
[Out] byte[] signature,
[In, Out] ref uint signatureLen
);
[DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]
public static extern bool CryptReleaseContext(
IntPtr phProv,
int flags
);
[DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]
public static extern bool CryptDestroyHash(
IntPtr phProv
);
"@
Add-Type -MemberDefinition $lib -Namespace PKI -Name CSP
cryptcp.exe -creatrqst ".\1.req" -provtype 80 -exprt -dn "C=RU, S=77 Москва, L=г. Москва, O=111, CN=111, 1.2.643.100.1=1111111111111, 1.2.643.100.4=1111111111, STREET=1111" -altname www.11.ru, -altname 11.ru -certusage "1.3.6.1.5.5.7.3.1,1.3.6.1.5.5.7.3.2" -both -ku -cont "\\.\HDIMAGE\MyContainer"
$PKCS10Request = [Org.BouncyCastle.OpenSsl.PemReader]::new([System.IO.File]::OpenText((gi -Path ".\1.req").FullName)).ReadObject() -as [Org.BouncyCastle.Pkcs.Pkcs10CertificationRequest]
$Der_PKCS10Request = [Org.BouncyCastle.Asn1.DerSequence]::GetInstance($PKCS10Request.GetDerEncoded())
$tbsRequest = [Org.BouncyCastle.Asn1.DerSequence]::new(
@(
$Der_PKCS10Request[0][0],
$Der_PKCS10Request[0][1],
$Der_PKCS10Request[0][2]
) -as [Org.BouncyCastle.Asn1.Asn1Encodable[]]
)
[IntPtr] $phProv = [IntPtr]::Zero
[PKI.CSP]::CryptAcquireContext(
[ref]$phProv,
"\\.\HDIMAGE\MyContainer",
"Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider",
80,
(0x0)
)
[IntPtr] $hHash = [IntPtr]::Zero
[PKI.CSP]::CryptCreateHash($phProv, 32801, [System.IntPtr]::Zero, 0, [ref] $hHash)
[PKI.CSP]::CryptHashData($hHash, $tbsRequest.GetDerEncoded(), $tbsRequest.GetDerEncoded().Count, 0)
[byte[]] $signature = $null
[uint32] $signatureLen = 0
[PKI.CSP]::CryptSignHash($hHash, 0x1, [System.IntPtr]::Zero, 0, $signature, [ref] $signatureLen)
$signature = [byte[]]::new($signatureLen)
[PKI.CSP]::CryptSignHash($hHash, 0x1, [System.IntPtr]::Zero, 0, $signature, [ref] $signatureLen)
[PKI.CSP]::CryptDestroyHash($hHash)
[PKI.CSP]::CryptReleaseContext($phProv,0)
[array]::reverse($signature)
$Der_NewReq = ([Org.BouncyCastle.Asn1.DerSequence]::new(
@(
$tbsRequest,
$Der_PKCS10Request[1],
[Org.BouncyCastle.Asn1.DerBitString]::new($signature)
) -as [Org.BouncyCastle.Asn1.Asn1Encodable[]]
).GetDerEncoded())
$NewReq = [Org.BouncyCastle.Pkcs.Pkcs10CertificationRequest]::new($Der_NewReq)
$NewReq.Verify()
[System.Convert]::ToBase64String($Der_NewReq)
Отредактировано пользователем 11 декабря 2022 г. 14:52:35(UTC)
| Причина: Не указана |