PrakashManikkam Ответов: 1

Мне нужно прочитать файл сертификата цифровой подписи с моего usb-устройства и записать его в текстовый файл. Пожалуйста, помогите мне


Я работаю с файлом с цифровой подписью . Мне нужно создать этот файл. У меня есть сертификат цифровой подписи с моего USB-устройства. Мне нужно прочитать данные подписи и сертификата (в зашифрованном формате) и записать их в текстовый файл. Я использую vb.net чтобы спроектировать это . Пожалуйста, помогите мне, ребята.


Что я уже пробовал:

using System;
using System.Security.Cryptography;
using System.Security.Permissions;
using System.IO;
using System.Security.Cryptography.X509Certificates;

class CertSelect
{
    static void Main()
    {
        X509Store store = new X509Store("MY",StoreLocation.CurrentUser);
        store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);

        X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;
        X509Certificate2Collection fcollection = (X509Certificate2Collection)collection.Find(X509FindType.FindByTimeValid,DateTime.Now,false);
        X509Certificate2Collection scollection = X509Certificate2UI.SelectFromCollection(fcollection, "Test Certificate Select","Select a certificate from the following list to get information on that certificate",X509SelectionFlag.MultiSelection);
        Console.WriteLine("Number of certificates: {0}{1}",scollection.Count,Environment.NewLine);

        foreach (X509Certificate2 x509 in scollection)
        {
            try
            {
                byte[] rawdata = x509.RawData;
                Console.WriteLine("Content Type: {0}{1}",X509Certificate2.GetCertContentType(rawdata),Environment.NewLine);
                Console.WriteLine("Friendly Name: {0}{1}",x509.FriendlyName,Environment.NewLine);
                Console.WriteLine("Certificate Verified?: {0}{1}",x509.Verify(),Environment.NewLine);
                Console.WriteLine("Simple Name: {0}{1}",x509.GetNameInfo(X509NameType.SimpleName,true),Environment.NewLine);
                Console.WriteLine("Signature Algorithm: {0}{1}",x509.SignatureAlgorithm.FriendlyName,Environment.NewLine);
                Console.WriteLine("Private Key: {0}{1}",x509.PrivateKey.ToXmlString(false),Environment.NewLine);
                Console.WriteLine("Public Key: {0}{1}",x509.PublicKey.Key.ToXmlString(false),Environment.NewLine);
                Console.WriteLine("Certificate Archived?: {0}{1}",x509.Archived,Environment.NewLine);
                Console.WriteLine("Length of Raw Data: {0}{1}",x509.RawData.Length,Environment.NewLine);
                X509Certificate2UI.DisplayCertificate(x509);
                x509.Reset();
            }
            catch (CryptographicException)
            {
                Console.WriteLine("Information could not be written out for this certificate.");
            }
        }
        store.Close();
    }
}

CHill60

В чем проблема с вашим кодом?

1 Ответов

Рейтинг:
1

RickZeeland

Вот пример в C#, который также проверяет срок годности:

/// <summary>
/// Check .pfx expiry date.
/// </summary>
/// <param name="pfxFileName">The .pfx full file name, e.g. MyCertificate.pfx</param>
/// <param name="certificateName">The search string, e.g. 'MyCompany'</param>
/// <param name="certPw">The optional passw</param>
/// <returns>True when ok</returns>
public static bool TestPfx(string pfxFileName, string certificateName, string certPw = "")
{
    X509Certificate2Collection collection = new X509Certificate2Collection();
    collection.Import(pfxFileName, certPw, X509KeyStorageFlags.PersistKeySet);

    foreach (X509Certificate2 cert in collection)
    {
        // Skip COMODO and other entries until MyCompany entry is found.
        if (cert.Subject.Contains(certificateName))
        {
            Console.WriteLine("Subject is: '{0}'", cert.Subject);
            Console.WriteLine("Expire date is:  '{0}'", cert.NotAfter);

            //if (CheckExpiryDate(cert.NotAfter))
            //{
            //    Console.WriteLine("ERROR: MyCompany date expired");
            //    return false;       // exit code failed.
            //}
        }
    }

    return true;
}