Как я могу получить «цель» (сертификат аутентификации клиента) сертификата в .NET? - PullRequest
2 голосов
/ 22 сентября 2010

Я хочу найти все сертификаты аутентификации клиента из X509Store(StoreLocation.CurrentUser)

Есть ли что-нибудь, чтобы сделать это? Даже если получить всю фильтрацию по определенному свойству, чтобы получить все сертификаты проверки подлинности клиента?

Ответы [ 2 ]

2 голосов
/ 23 сентября 2010

Существуют расширения, помогающие определить, что можно использовать в качестве сертификата клиента:

  • Расширение Расширенное использование ключа , которое будет id-kp-clientAuth, если присутствует.
  • «Устаревшее» расширение Netscape Cert Type (не строго стандартное, но широко распространенное, даже за пределами мира инструментов Netscape / Mozilla).

Сертификаты вообще без этих расширений могут также использоваться в качестве клиентских сертификатов, при условии, что они совместимы с (не расширенным) расширением использования ключа (если имеется). Что нужно по крайней мере в (не расширенном) расширении использования ключа - digitalSignature для сертификата клиента. Не совсем понятно, что произойдет, если вы получите как Netscape Cert Type, так и расширения Extended Key Usage, хотя, в духе RFC 5280, стоило бы рассмотреть возможность использования в целях, совместимых со всеми имеющимися расширениями:

Если сертификат содержит оба ключа расширение использования и расширенный ключ расширение использования, то оба расширения ДОЛЖНЫ обрабатываться независимо и сертификат ДОЛЖЕН использоваться только для цель, совместимая с обоими расширения. Если нет цели в соответствии с обоими расширениями, тогда сертификат НЕ ДОЛЖЕН использоваться для любых целей.

Техническое примечание NSS 3 (Все о продлении сертификата) должно представлять интерес.

1 голос
/ 22 сентября 2010

Вам необходимо изучить Расширения каждого сертификата. Насколько я понимаю, как только вы получите расширение Key Usage , у вас должна быть вся необходимая информация.

Редактировать На самом деле, для аутентификации клиента вам, вероятно, понадобится расширение Enhanced Key Usage. У меня нет сертификата проверки подлинности клиента, чтобы проверить его, но для сертификата сервера, который я получил, напечатано следующее «Проверка подлинности сервера»:

        var cert1 = new X509Certificate2(/* Path to certificate */);
        foreach (var ext in cert1.Extensions)
        {
            var eku = ext as X509EnhancedKeyUsageExtension;
            if (eku != null)
            {
                foreach (var oid in eku.EnhancedKeyUsages)
                {
                    Console.WriteLine(oid.FriendlyName);
                }
            }
        }
...