2010-08-26 5 views
0

Je développe un système qui doit signer des fichiers. J'ai déjà une fonction qui reçoit l'octet [] de données à signer et le certificat X509 et calcule la signature en utilisant l'espace de noms System.Security.Cryptography.Pkcs. Il est important de noter que nous avons besoin de la signature à désaffecter, donc pour la vérification, nous utilisons le fichier, la signature détachée et le certificat.C# signatures PKCS

Le fait est que cette fonction retourne un octet [] comme signature. En ce moment pour la sérialiser, j'utilise l'encodage Base64, mais j'ai vu que la norme est d'utiliser les fichiers .p7s. Donc, comment générer un fichier .p7s à partir de l'octet [] de la signature détachée?

Une autre question, est-il un moyen d'ajouter un horodatage sur la signature, puis de le récupérer?

Merci! Juan

Répondre

0

p7s est une signature détachée PKCS # 7 elle-même. Il peut être (facultativement) encodé en base64 et c'est tout, il n'y a pas d'autre formatage qui doit être appliqué.

Oui, vous pouvez signer l'horodatage PKCS # 7. Vous devez lire la RFC 3161 et l'implémenter vous-même. Vous pouvez utiliser PKI components de notre produit SecureBlackbox. Nos composants vous permettent de signer et d'horodater des données en utilisant PKCS # 7 et CMS (extension et descendant de PKCS # 7). Je ne suis pas au courant des clients d'horodatage gratuits pour PKCS # 7, bien que certains puissent exister.

0

maintenant possible en utilisant la classe 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(); 
} 
Questions connexes