Open mshamito opened 3 years ago
Спасибо, за замечание. Мы начали перенос в capilite магии из Windows, думаю, через пару месяцев будет готово для Linux в рамках предварительной версии КриптоПро CSP 5r3.
Создание аттрибутов нужно в сам Net Core добавлять. Т.к. из нативного кода там вызывается CryptSignHash и он не знает ни чего про CMS.
Да, родной .NET меня ввёл в заблуждение. В .NET Core работа с CMS сделана не через CryptMsg, поэтому магия не срабатывает. В capilite она уже есть.
спасибо. единственное рабочее решение которое нашел: делать cades-bes через p/invoke libcades.so но кол-во кода выростает в разы. особенно если нужно только cades-bes. было бы удобно если бы существовал интерфейс от Крипто-Про который к примеру возвращал объекты AsnEncodedData/CryptographicAttributeObject для последующего добавления их в cmsSigner.SignedAttributes.Add()
Удобнее кодировать аттрибут через Bouncy Castle. если не ветвить код на алгоритмы, то примерно выглядит так:
static AsnEncodedData SigningCertV2(X509Certificate2 cert)
{
var bouncyCert = new Org.BouncyCastle.X509.X509CertificateParser().ReadCertificate(cert.GetRawCertData());
HashAlgorithm gost = new Gost3411_2012_256CryptoServiceProvider();
byte[] hashValue = gost.ComputeHash(cert.RawData);
EssCertIDv2 essCertIDv2 = new EssCertIDv2(
//P.S. using AlgorithmIdentifier = Org.BouncyCastle.Asn1.X509.AlgorithmIdentifier;
new AlgorithmIdentifier("1.2.643.7.1.1.2.2"), //szOID_CP_GOST_R3411_12_256
hashValue,
new IssuerSerial(
new GeneralNames(new GeneralName(bouncyCert.IssuerDN)),
new DerInteger(new BigInteger(bouncyCert.SerialNumber.ToString()))
)
);
SigningCertificateV2 signingCertificateV2 = new SigningCertificateV2(essCertIDv2);
return new AsnEncodedData(new Oid("1.2.840.113549.1.9.16.2.47"), signingCertificateV2.GetEncoded());
}
будет ли в будущем использоваться BC как в JCP?
debian 10, csp 5.0.11998 при использовании ComputeSignature в подписи отсутствуют необходимые обязательные подписанные аттрибуты cades-bes. время подписания можно добавить указав
cmsSigner.SignedAttributes.Add(new Pkcs9SigningTime(DateTime.Now));
но для добавления подписанного аттрибута Signing certificate V2 (1.2.840.113549.1.9.16.2.47) нет удобных способов