Сертификат X.509 не может быть найден с помощью FindBySubjectName

После жестокой борьбы с WCF Security, я думаю, что сейчас я на финальной стадии и вижу свет.

На моем сервере установлен клиентский сертификат, который, как и было рекомендовано, теперь находится в папке «Доверенные люди» хранилища сертификатов.

Однако, когда я пытаюсь прочитать приложение сертификата -> сервис, я получаю эту ошибку:

Не удается найти сертификат X.509 по следующим критериям поиска: StoreName «My», StoreLocation «CurrentUser», FindType «FindBySubjectName», FindValue «Forename Surname».

Поскольку «Имя Фамилия» является частью моего сертификата «Кому выдан». Во всех обучающих материалах, которые я видел, это всего лишь одно слово; это проблема? Я получил сертификат от моего центра сертификации с этими двумя словами с пробелом.

Кто-нибудь когда-либо сталкивался с этим, есть ли что-то, что я явно делаю неправильно?

Обновление, сертификат можно увидеть здесь:

введите описание изображения здесь

Обновлять:

Становится еще более странным:

Я установил Visual Studio на свой веб-сервер и использовал следующий код для получения сертификата по отпечатку пальца:

var store = new X509Store(StoreName.TrustedPeople, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
var certs = store.Certificates.Find(X509FindType.FindByThumbprint, "71995159BFF803D25BFB691DEF7AF625D4EE6DFB", false);

Это действительно ВОЗВРАЩАЕТ действительный результат. Но когда я помещаю эту информацию в web.config моего сервиса / клиента, я все равно получаю сообщение об ошибке.


person Chris Dixon    schedule 06.11.2012    source источник
comment
Вы управляете сертификатами текущего пользователя. Предположительно somedomain\cdixon. Веб-служба работает как somedomain\cdixon или как-то еще, скажем, NETWORK SERVICE?   -  person ta.speot.is    schedule 06.01.2014


Ответы (2)


Я думаю ... Вы установили сертификат в расположение Доверенные и выполняете поиск по названию магазина мой

var store = new X509Store(StoreName.TrustedPeople, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
var certs = store.Certificates.Find(X509FindType.FindBySubjectDistinguishedName, certificateSubject, false);

Также есть два условия поиска FindBySubjectName или FindBySubjectDistinguishedName, последний более релевантен для ключевых слов, а первый найдет что-нибудь с ключевыми словами для поиска.

Итак, в основном вам нужно искать тему, и если вы используете приведенный выше код, ваша строка поиска будет ... "CN = urs.microsoft.com, O = DO_NOT_TRUST, OU = Created by http://fiddler2.com"

Свойства сертификата

person indiPy    schedule 06.11.2012
comment
Я пробовал оба из них - storeName TrustedPeople и FindBySubjectDistinguishedName по-прежнему не возвращают никаких результатов, как это расстраивает! Я обновил свое сообщение изображением моего сертификата, должен ли я определенно использовать CurrentUser, а не LocalMachine? Сервис и клиент находятся в одном веб-боксе. - person Chris Dixon; 06.11.2012
comment
если редактирование не работает, можете ли вы опубликовать снимок экрана с темой, как я, а также код. - person indiPy; 06.11.2012
comment
У меня есть тема, но она намного более подробная, чем на скриншоте выше, у нее есть адрес, почтовый индекс, электронная почта и т. Д., Очень длинная строка, когда все вместе. Мне все это нужно? - person Chris Dixon; 06.11.2012
comment
Я думаю, это не имеет значения ... но вам не нужно искать по всем ключевым словам, просто используйте те, которые уникальны в контексте. - person indiPy; 06.11.2012
comment
Особенность поиска с использованием отличительного имени заключается в том, что оно должно быть отформатировано дословно, поскольку оно закодировано внутри данных ASN.1, например, "CN=Name, O=Company" является допустимым, а "CN=Name,O=Company" и "CN = Name, O = Company" недопустимыми. Я бы предложил сначала отформатировать его с помощью этого кода: new X500DistinguishedName("CN=Name,O=Company", X500DistinguishedNameFlags.None).Format(false) и передать возвращаемое значение методу Find. - person George Chakhidze; 21.03.2019

https://i.stack.imgur.com/QtYvV.png

private X509Certificate2 GetCertificateFromStore()
        {
            var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
            store.Open(OpenFlags.ReadOnly);
            var certCollection = store.Certificates;
            var currentCerts = certCollection.Find(X509FindType.FindBySubjectDistinguishedName, "CN=sf.sandbox.mapshc.com", false);
                return currentCerts.Count == 0 ? null : currentCerts[0];
        }
person Sagaya Amalraj    schedule 21.04.2018