Сертификатът X.509 не може да бъде намерен с FindBySubjectName

След брутална борба с WCF Security, мисля, че вече съм на финалния етап и мога да видя светлината.

Имам клиентски сертификат, инсталиран на моя сървър и сега, както беше препоръчано, е в папката Trusted People на хранилището на сертификати.

Въпреки това, когато се опитам да прочета приложението за сертификат -> услуга, получавам тази грешка:

Не може да се намери сертификатът X.509, като се използват следните критерии за търсене: StoreName 'My', StoreLocation 'CurrentUser', FindType 'FindBySubjectName', FindValue 'Forename Surname'.

Като „Име Фамилия“ е частта „Издадено на“ от моя сертификат. Във всички уроци, които съм виждал, това е само една дума; това ли е проблема Получих сертификата си от моя CA с тези две думи, с интервал.

Някой някога да е попадал на това, има ли нещо, което явно правя погрешно?

Актуализация, сертификат може да се види тук:

въведете описание на изображението тук

Актуализация:

Става още по-странно:

Инсталирах Visual Studio на моя уеб сървър и използвах следния код, за да взема сертификата от Thumbprint:

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)


Мисля, че... Инсталирахте сертификат на място Доверени хора и търсите в името на магазина my

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

Също така има две думи за търсене FindBySubjectName или FindBySubjectDistinguishedName, като по-късната е по-подходяща за ключови думи и първата ще намери всичко с ключови думи за търсене.

Така че основно трябва да потърсите Subject и ако използвате горния код, тогава вашият низ за търсене ще бъде .."CN=urs.microsoft.com, O=DO_NOT_TRUST, OU=Създадено от 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
Имам моя Subject, но той е много по-подробен от екранната снимка по-горе, има адрес, пощенски код, имейл и т.н., много дълъг низ, когато всичко се събере. Имам ли нужда от всичко това? - 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