Подпись ИЭМК с помощью VipNet CSP: различия между версиями

Материал из Wiki МИАЦ ВО
Перейти к навигации Перейти к поиску
(Метка: visualeditor)
Строка 1: Строка 1:
 
Поиск нужного сертификата. Ищем по конкретному СНИЛСу и действующий на текущую дату.
 
Поиск нужного сертификата. Ищем по конкретному СНИЛСу и действующий на текущую дату.
<nowiki>#</nowiki>fghl;jdfg
+
<pre>X509Certificate2 CertItog = find_certificate_();</pre>
 +
 
 +
<pre>       public static X509Certificate2 find_certificate_()
 +
        {
 +
 
 +
            X509Store store = new X509Store("MY", StoreLocation.CurrentUser);
 +
            store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
 +
            X509Certificate2 cert = new X509Certificate2();
 +
            X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;
 +
            X509Certificate2Collection fcollection = (X509Certificate2Collection)collection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);
 +
            string str_SN = "";
 +
            foreach (X509Certificate2 x509 in fcollection)
 +
            {
 +
                try
 +
                {
 +
                    if (x509.Subject.ToUpper().Contains("SNILS") || x509.Subject.ToUpper().Contains("СНИЛС"))
 +
                    {
 +
 
 +
                        str_SN = x509.Subject.Substring(x509.Subject.IndexOf("SNILS") + 6, 11);
 +
                        int n;
 +
                        if (!int.TryParse(str_SN.Substring(0, 10), out n))
 +
                        {
 +
                            str_SN = x509.Subject.Substring(x509.Subject.ToUpper().IndexOf("СНИЛС") + 6, 11);
 +
                            if (!int.TryParse(str_SN.Substring(0, 10), out n))
 +
                            {
 +
                                continue;
 +
                                //                                System.Windows.Forms.MessageBox.Show("Снилс в сертификате не найден или пустой");
 +
                            }
 +
                        }
 +
                        if (String.CompareOrdinal(str_SN, "NNNNNNNNNNNNN") == 0)
 +
                        {
 +
                            cert = x509;
 +
                            //                            Console.WriteLine(cert.Subject);
 +
                            Console.WriteLine(str_SN);
 +
//                            Console.ReadKey();
 +
                            break;
 +
                        }
 +
                    }
 +
                    x509.Reset();
 +
                }
 +
                catch (CryptographicException)
 +
                {
 +
                    Console.WriteLine("Information could not be written out for this certificate.");
 +
                }
 +
            }
 +
            store.Close();
 +
            return cert;
 +
        }
 +
</pre>

Версия 14:30, 20 октября 2016

Поиск нужного сертификата. Ищем по конкретному СНИЛСу и действующий на текущую дату.

X509Certificate2 CertItog = find_certificate_();
        public static X509Certificate2 find_certificate_()
        {

            X509Store store = new X509Store("MY", StoreLocation.CurrentUser);
            store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
            X509Certificate2 cert = new X509Certificate2();
            X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;
            X509Certificate2Collection fcollection = (X509Certificate2Collection)collection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);
            string str_SN = "";
            foreach (X509Certificate2 x509 in fcollection)
            {
                try
                {
                    if (x509.Subject.ToUpper().Contains("SNILS") || x509.Subject.ToUpper().Contains("СНИЛС"))
                    {

                        str_SN = x509.Subject.Substring(x509.Subject.IndexOf("SNILS") + 6, 11);
                        int n;
                        if (!int.TryParse(str_SN.Substring(0, 10), out n))
                        {
                            str_SN = x509.Subject.Substring(x509.Subject.ToUpper().IndexOf("СНИЛС") + 6, 11);
                            if (!int.TryParse(str_SN.Substring(0, 10), out n))
                            {
                                continue;
                                //                                System.Windows.Forms.MessageBox.Show("Снилс в сертификате не найден или пустой");
                            }
                        }
                        if (String.CompareOrdinal(str_SN, "NNNNNNNNNNNNN") == 0)
                        {
                            cert = x509;
                            //                            Console.WriteLine(cert.Subject);
                            Console.WriteLine(str_SN);
//                            Console.ReadKey();
                            break;
                        }
                    }
                    x509.Reset();
                }
                catch (CryptographicException)
                {
                    Console.WriteLine("Information could not be written out for this certificate.");
                }
            }
            store.Close();
            return cert;
        }