Мне нужно создать простой клиент подписи в WPF. Рабочая станция уже настроена с помощью набора сертификатов, импортированных с помощью смарт-карты. Одним из них является сертификат подписи, другие используются для аутентификации электронной почты и шифрования.Получение действительных сертификатов из хранилища сертификатов браузера для целей подписания
Итак, я делаю простой выпадающий список, в котором пользователь может выбрать свой предпочтительный сертификат из списка, но я хотел бы исключить сертификаты, не связанные с подписанием документов. Изучив сертификат, я могу прочитать его цель, затем я хотел бы прочитать его программно.
До сих пор я писал:
IEnumerable<Certificate> certificates;
X509Store store = new X509Store(StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
try
{
certificates = from X509Certificate2 certificate in store.Certificates
where certificate.HasPrivateKey
&& certificate.NotAfter <= DateTime.Now && certificate.NotBefore >= DateTime.Now
select new Certificate
{
CommonName = certificate.SubjectName.Decode(X500DistinguishedNameFlags.UseUTF8Encoding),
Id = Convert.ToString(certificate.GetSerialNumber())
};
}
finally
{
store.Close();
}
В результате приведенного выше кода является список, по крайней мере, включает в себя хорошо известный сертификат проверки подлинности электронной почты.
Какое условие следует добавить для проверки наличия у сертификата usage attribute == non repudiation
?
Возможно, вы можете посмотреть коллекцию 'Extensions' и найти расширение' KeyUsage' https://msdn.microsoft.com/pl-pl/library/system.security.cryptography.x509certificates.x509keyusageextension(v=vs 0,110) .aspx. Существует свойство KeyUsages, которое должно указать вам, какой сертификат вы действительно проверяете. Я бы поставил это в ответ, но я не уверен, что это то, что вам нужно. –
Вы могли бы отправить ответ, ведь благодаря вам я нашел ** правильное решение –
, это может помочь http://stackoverflow.com/questions/17520736/call-a-https-wcf-service-with- сертификат-аутентификация –