Подписать Xml цифровым сертификатом в формате PKCS # 7 в DER (Рек. МСЭ-Т X.690)

1

У меня есть .xml файл, который должен быть подписан с digital certificate в формате PKCS#7 version 1.5 (RFC 2315) и DER (ITU-T Recommendation X.690

Этот .xml будет отправлен в правительство. WebService которые принимают только формат, упомянутый выше.

То, что я могу сделать - благодаря этому сайту, это цифровой знак .xml с файлом .pfx который я сгенерировал с помощью Certificate Export Wizard описанного ниже. Класс, который я использую для подписания, указан на указанном веб-сайте или здесь.

Из того, что я пытался понять до сих пор, мне нужно будет подписать файл .xml с .pfx файлом в соответствии со стандартами X.690 но я могу получить доступ к этому пространству имен:

using System.Security.Cryptography.X509Certificates;

что, очевидно, для формата X.509.

Заметка:

Есть несколько вещей, с которыми я запутался - экспортировать сертификат в .pfx Я использую Internet Explorer - Certificate Export Wizard откуда я могу:

Да - экспортировать секретные ключи - тогда он будет сгенерирован в PKCS#12 но .pfx

Нет - не экспортировать закрытые ключи - Сертификат в соответствии со стандартами Cryptographic Message Syntax Standard - PKCS#7 который, как мне кажется, мне нужен, но я бы получил файл .p7b

Я должен сказать, что я новичок в сертификатах и цифровых подписях, поэтому я даже не уверен, правильно ли я экспортирую сертификат, а во-вторых, как я могу подписываться в соответствии со стандартами X.690.

Могу ли я узнать, как подписать в соответствии с форматом X.690, пожалуйста?

Спасибо всем за ваше время и ответы.

Мой код следующий:

bool res = false;
try
{
    byte[] certBytes = System.IO.File.ReadAllBytes(pvkPath);
    X509Certificate2 cert = new X509Certificate2(certBytes, certPass);
    XmlDocument doc = new XmlDocument();

    doc.Load(xmlPath);

    // sign the document with the private key of the certificate
    XmlDsig.SignXml(doc, cert);

    // save the document
    doc.Save(xmlSavePath);

    // verify that the document has a signature
    bool hasSignature = XmlDsig.HasSignatureElement(doc);
    return res = true;
}
catch (Exception)
{ return res; }
Теги:
digital-signature
pkcs#7
pfx

1 ответ

1
Лучший ответ

fo Цифровая подпись в формате PKCS # 7/CMS - это blob, который содержит сертификат публичного ключа XML + signer x509 (файл.cer) + цифровую подпись. Весь blob закодирован в формате ASN 1.0 (X690). Могут быть изменения в блобе из-за отсутствия исходных данных или сертификата подписывающего лица. Этот вариант называется отрывными сигнатурами.

Цифровая подпись генерируется, когда вы подписываете свой XML файл с помощью закрытого ключа подписывающего лица. Эта подпись может быть проверена, когда вы отправляете свой XML файл + подписанный открытый ключ (как файл X509.cer) + цифровую подпись стороне, которая заинтересована в ее проверке.

PFX/p12 - это контейнер, содержащий как закрытый ключ, так и открытый ключ. Вы получаете эту ключевую пару либо от своего правительства, либо от ваших одобренных правительством ключевых хранителей. Затем вы будете использовать этот PFX для выполнения цифровой подписи.

PKCS # 7 поддерживается cryptoAPI.

Вышеизложенные основы. Это должно позволить вам сделать ваши запросы более четкими.

  • 0
    Здравствуйте, большое спасибо за ваш ответ, который прояснил всю процедуру. В течение последних 2 дней я пытался подписать XML цифровой file.xml.p7m с закрытым ключом файла .pfx поэтому я создал новый файл file.xml.p7m который, по вашему мнению, является одной из двух частей, которые мне нужно отправить - нужно ли мне прикрепить к нему открытый ключ? Еще раз большое спасибо.
  • 0
    Формат PKCS # 7 уже определен. Многие API поддерживают это. Один из них - CryptoAPI, другие - OpenSSL, BountyCastle. Какой API вы используете для подписи вашего файла? Ваш API позволит вам прикрепить сертификат открытого ключа.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню