C # PKCS подписи - PullRequest
       28

C # PKCS подписи

0 голосов
/ 26 августа 2010

Я разрабатываю систему, которая должна подписывать файлы. У меня уже есть функция, которая получает байт [] данных для подписи и сертификат X509 и вычисляет подпись, используя пространство имен System.Security.Cryptography.Pkcs. Важно отметить, что нам нужно отсоединить подпись, поэтому для проверки мы используем файл, отсоединенную подпись и сертификат.

Дело в том, что эта функция возвращает байт [] в качестве сигнатуры. Прямо сейчас для его сериализации я использую кодировку Base64, но я видел, что стандартом является использование файлов .p7s.

Итак, как мне сгенерировать файл .p7s из байта [] отсоединенной подписи?

Другой вопрос, есть ли способ добавить метку времени в подпись и затем извлечь ее?

Спасибо! Juan

Ответы [ 2 ]

0 голосов
/ 27 февраля 2014

Теперь это возможно с использованием класса X509Certificate2

public static byte[] Sign(byte[] data, X509Certificate2 certificate)
{
    if(data == null)
        throw new ArgumentNullException("data");
    if(certificate == null)
        throw new ArgumentNullException("certificate");

    // setup the data to sign
    ContentInfo content = new ContentInfo(data);
    SignedCms signedCms = new SignedCms(content, false);
    CmsSigner signer = new CmsSigner(SubjectIdentifierType.IssuerAndSerialNumber, certificate);

    // create the signature
    signedCms.ComputeSignature(signer);
    return signedCms.Encode();
}
0 голосов
/ 26 августа 2010

p7s - это отдельная подпись PKCS # 7.Он может быть (опционально) в кодировке base64, и все, другого форматирования не требуется.

Да, вы можете поставить метку времени в подписи PKCS # 7.Вам необходимо прочитать RFC 3161 и реализовать его самостоятельно.Вы можете использовать компоненты PKI нашего продукта SecureBlackbox.Наши компоненты позволяют подписывать данные и метки времени, используя PKCS # 7 и CMS (расширение и потомок PKCS # 7).Я не знаю о свободных клиентах с метками времени для PKCS # 7, хотя некоторые могут существовать.

...