Эмитент и серийный номер контролируются злоумышленником, поэтому они не подходят для проверки.
Отпечаток пальца - это SHA1 нескольких свойств сертификата , включая эмитента, серийный номер, открытый ключ. Это, вероятно, пока нормально, и не может быть изменено .NET, потому что это функция Windows, но отпечатки пальцев предназначены для справки, а не безопасности.
Лучшим подходом было бы сравнить подпись сертификата и хеш-код и установить минимальное качество для хеш-кода SHA256 или выше. cert.SignatureAlgorithm.Value;
выдаст вам алгоритм в виде OID, затем вы можете создать для него новый System.Security.Cryptography.Oid и использовать свойство FriendlyName для получения алгоритма в тексте, но фактическая подпись не поддерживается, Вы должны восстановить третьим лицам, как BouncyCastle. Так что, вероятно, это не так, потому что кажется глупым принимать за это зависимость.
Действительно, это сводится к тому, как вы регистрируете клиентские сертификаты. Я хотел бы попросить сертификаты (или где-нибудь выполнить процедуру регистрации, например, скажем, nuget имеет для подписи сертификатов), поместить их в класс X509Certificate2, затем создать хэш SHA256 свойства RawData и добавить его в свой список разрешений. Затем сделайте то же самое для входящих клиентских сертификатов и сравните SHA256 необработанных данных из входящего сертификата с разрешенным списком. Конечно, теперь вы должны справиться с истечением срока действия сертификата ...