<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Форум Рутокен &mdash; Работа с rutoken. C#]]></title>
	<link rel="self" href="https://forum.rutoken.ru/feed/atom/topic/2507/" />
	<updated>2016-12-29T14:32:18Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.rutoken.ru/topic/2507/</id>
		<entry>
			<title type="html"><![CDATA[Re: Работа с rutoken. C#]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/10257/#p10257" />
			<content type="html"><![CDATA[<p>Добрый день.<br />Похоже, что ваш код рабочий, но я не вижу где в нем хоть какая-то работа с Рутокен?</p>]]></content>
			<author>
				<name><![CDATA[Кирилл Мещеряков]]></name>
				<uri>https://forum.rutoken.ru/user/6786/</uri>
			</author>
			<updated>2016-12-29T14:32:18Z</updated>
			<id>https://forum.rutoken.ru/post/10257/#p10257</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Работа с rutoken. C#]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/10243/#p10243" />
			<content type="html"><![CDATA[<p>Посмотрите пожалуйста на мой кастыль. Посоветуйте, как его улучшить и будет ли он работать правильно?</p><p>У меня работает, результат тестирования :</p><p>С помощью метода &quot;ПредварительнаяПроверкаПередПодписанием&quot;, пользователю предоставляется выбор сертификата, если пользователь не выбирает сертификат, получаем сообщение и возвращаем Null,&nbsp; если выбранный сертификат просроченный, получаем сообщение об этом и возратим null, если сертификат валидный, пробуем найти ключ, если ключа нет, получаем отрицательный результат проверки и метод возвратит null.</p><p>Если сертификат выбранный пользователем не просроченный и вставлен ключевой носитель, то метод вернёт сертификат для дальнейшего подписания с него.</p><p>зы<br />нужно предоставить выбор сертификата из личных сертификатов пользователя и тех, которые присутствуют на ключе, как у меня работает в коде, пока не разобрался, вроде бы выбор сертификатов осуществляется по личным сертификатам пользователя...</p><p>&nbsp; &nbsp; </p><div class="codebox"><pre><code>    /// &lt;summary&gt;
    /// Возвращает валидный сертификат или null если валидный сертификат отсутствует
    /// &lt;/summary&gt;
    /// &lt;returns&gt;&lt;/returns&gt;
    public X509Certificate2 ПредварительнаяПроверкаПередПодписанием()
    {
        // Находим секретный ключ по сертификату в хранилище MY
        X509Store store = new X509Store(&quot;My&quot;, StoreLocation.CurrentUser);
        store.Open(OpenFlags.ReadOnly);

        X509Certificate2Collection coll = X509Certificate2UI.SelectFromCollection(store.Certificates, &quot;Выберите сертификат&quot;, &quot;Выберите сертификат&quot;, X509SelectionFlag.SingleSelection);

        if (coll.Count == 0 || coll == null)
        {
            Console.WriteLine(&quot;Ключ не найден.&quot;);
            return null;
        }

        X509Certificate2 certificate = coll[0];

        if (certificate == null /*|| certificate.Verify()*/)
        {
            Console.WriteLine(&quot;Ключ не найден.&quot;);
            return null;
        }
        if (!ValidateCertificate(certificate))
        {
            return null;
        }
        //заглушка для вызовы диалога выбора носителя ключа
        byte[] buff = new byte[8192];
        var contentInfo = new ContentInfo(buff);

        // сертификат для подписания
        SignedCms signedCms = new SignedCms(contentInfo, true);
        try
        {
            // Вычисляем подпись
            var cmsSigner = new CmsSigner(certificate);
            signedCms.ComputeSignature(cmsSigner, false);
        }
        catch (System.Security.Cryptography.CryptographicException ex)
        {
            Console.WriteLine(ex.Message);
            return null;
        }
        return certificate;
    }
     /// &lt;summary&gt;
     /// Проверка валидности сертификата
     /// &lt;/summary&gt;
    private bool ValidateCertificate(X509Certificate2 x509)
    {
        bool valid = false;
        DateTime timeSert = DateTime.Parse(x509.GetExpirationDateString());

        if (DateTime.Now.CompareTo(timeSert) &lt; 0)
        {
            // Console.WriteLine(&quot;Сертификат валиден. Текущая дата: &quot; + DateTime.Now.ToString() + &quot; Дата сертификата: &quot; + timeSert.ToString()); */
            valid = true;
        }
        else
        {
            Console.WriteLine(&quot;Сертификат не валиден. Текущая дата: &quot; + DateTime.Now.ToString() + &quot; Дата сертификата: &quot; + timeSert.ToString());
        }

        return valid;
    }</code></pre></div>]]></content>
			<author>
				<name><![CDATA[system9266]]></name>
				<uri>https://forum.rutoken.ru/user/10273/</uri>
			</author>
			<updated>2016-12-28T06:44:42Z</updated>
			<id>https://forum.rutoken.ru/post/10243/#p10243</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Работа с rutoken. C#]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/10242/#p10242" />
			<content type="html"><![CDATA[<p>Добрый день, ваш вопрос к сожалению слишком расплывчатый, чтобы на него можно было бы конкретно ответить. <br />ознакомьтесь для начала с комплектом разработчика: <a href="https://www.rutoken.ru/developers/sdk/">https://www.rutoken.ru/developers/sdk/</a> и порталом документации <a href="http://dev.rutoken.ru">http://dev.rutoken.ru</a></p>]]></content>
			<author>
				<name><![CDATA[Кирилл Мещеряков]]></name>
				<uri>https://forum.rutoken.ru/user/6786/</uri>
			</author>
			<updated>2016-12-27T16:08:32Z</updated>
			<id>https://forum.rutoken.ru/post/10242/#p10242</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Работа с rutoken. C#]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/10241/#p10241" />
			<content type="html"><![CDATA[<p>Здравствуйте.<br />Подскажите пожалуйста как можно определить вставлен ли rutoken в ПК?<br />Интересуют так же способы определения на rutoken наличия актуальных сертификатов (не просроченных).<br />всё варианты на c#</p>]]></content>
			<author>
				<name><![CDATA[system9266]]></name>
				<uri>https://forum.rutoken.ru/user/10273/</uri>
			</author>
			<updated>2016-12-27T09:37:57Z</updated>
			<id>https://forum.rutoken.ru/post/10241/#p10241</id>
		</entry>
</feed>
