Работа с rutoken. C#
Здравствуйте.
Подскажите пожалуйста как можно определить вставлен ли rutoken в ПК?
Интересуют так же способы определения на rutoken наличия актуальных сертификатов (не просроченных).
всё варианты на c#
Вы не авторизованы. Пожалуйста, войдите или зарегистрируйтесь.
Форум Рутокен → Техническая поддержка разработчиков → Работа с rutoken. C#
Страницы 1
Чтобы отправить ответ, нужно авторизоваться или зарегистрироваться
Здравствуйте.
Подскажите пожалуйста как можно определить вставлен ли rutoken в ПК?
Интересуют так же способы определения на rutoken наличия актуальных сертификатов (не просроченных).
всё варианты на c#
Добрый день, ваш вопрос к сожалению слишком расплывчатый, чтобы на него можно было бы конкретно ответить.
ознакомьтесь для начала с комплектом разработчика: https://www.rutoken.ru/developers/sdk/ и порталом документации http://dev.rutoken.ru
Посмотрите пожалуйста на мой кастыль. Посоветуйте, как его улучшить и будет ли он работать правильно?
У меня работает, результат тестирования :
С помощью метода "ПредварительнаяПроверкаПередПодписанием", пользователю предоставляется выбор сертификата, если пользователь не выбирает сертификат, получаем сообщение и возвращаем Null, если выбранный сертификат просроченный, получаем сообщение об этом и возратим null, если сертификат валидный, пробуем найти ключ, если ключа нет, получаем отрицательный результат проверки и метод возвратит null.
Если сертификат выбранный пользователем не просроченный и вставлен ключевой носитель, то метод вернёт сертификат для дальнейшего подписания с него.
зы
нужно предоставить выбор сертификата из личных сертификатов пользователя и тех, которые присутствуют на ключе, как у меня работает в коде, пока не разобрался, вроде бы выбор сертификатов осуществляется по личным сертификатам пользователя...
/// <summary>
/// Возвращает валидный сертификат или null если валидный сертификат отсутствует
/// </summary>
/// <returns></returns>
public X509Certificate2 ПредварительнаяПроверкаПередПодписанием()
{
// Находим секретный ключ по сертификату в хранилище MY
X509Store store = new X509Store("My", StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection coll = X509Certificate2UI.SelectFromCollection(store.Certificates, "Выберите сертификат", "Выберите сертификат", X509SelectionFlag.SingleSelection);
if (coll.Count == 0 || coll == null)
{
Console.WriteLine("Ключ не найден.");
return null;
}
X509Certificate2 certificate = coll[0];
if (certificate == null /*|| certificate.Verify()*/)
{
Console.WriteLine("Ключ не найден.");
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;
}
/// <summary>
/// Проверка валидности сертификата
/// </summary>
private bool ValidateCertificate(X509Certificate2 x509)
{
bool valid = false;
DateTime timeSert = DateTime.Parse(x509.GetExpirationDateString());
if (DateTime.Now.CompareTo(timeSert) < 0)
{
// Console.WriteLine("Сертификат валиден. Текущая дата: " + DateTime.Now.ToString() + " Дата сертификата: " + timeSert.ToString()); */
valid = true;
}
else
{
Console.WriteLine("Сертификат не валиден. Текущая дата: " + DateTime.Now.ToString() + " Дата сертификата: " + timeSert.ToString());
}
return valid;
}
Добрый день.
Похоже, что ваш код рабочий, но я не вижу где в нем хоть какая-то работа с Рутокен?
Страницы 1
Чтобы отправить ответ, нужно авторизоваться или зарегистрироваться
Форум Рутокен → Техническая поддержка разработчиков → Работа с rutoken. C#