Подтвердить что ты не робот

В чем разница между X509Certificate2 и X509Certificate в .NET?

В чем разница между двумя?

4b9b3361

Ответ 1

x509Certificate был представлен в .NET v1.0/1.1 и был (сравнительно) ограничен в его функциональности. Его можно использовать для получения информации о существующем сертификате (действительные даты, эмитент и т.д.). У него были простые методы/операции (т.е. Чтение сертификата с диска).

x509Certificate2 является подклассом x509Certificate с дополнительной функциональностью.

  • Он представляет собой фактический сертификат X509.
  • Это было новое в .NET Framework версии 2.0.
  • Этот класс предоставляет вам доступ ко всем свойствам V2 и V3 (идентификатор ключевого ключа и использование ключа).
  • Он поддерживает загрузку сертификата из хранилища сертификатов.

Ответ 2

Для полноты, вот копия соответствующего раздела сайта, связанного с в ответе @dommer, так как сайт не может дольше, и только в кеше Google для тех, кто знает - как долго:

Версия 1.1 рамочной программы имела очень мало, Класс X509Certificate, позволяющий вам управлять сертификатами. В факт, класс v1.1 X509Certificate дал только базовую поддержку: он только дал доступ к полям версии X509 1 (например, действителен для дат, субъекта и открытого ключа), но не для полей версии 2 (например, идентификатор ключа полномочий), а также поля версии 3 (например, ключ Применение). Не было поддержки для загрузки сертификата из сертификата магазина, а также не имеет средств для доступа к сертификату списки отзыва или списки доверия сертификатов. Microsoft улучшила это с помощью инструментария расширения Web-сервисов (WSE), расширяющего класса сертификатов и предоставления классов для доступа к хранилищам сертификатов. Эти классы теперь можно найти в библиотеке фреймворков .NET 3.0/2.0.

Первым большим изменением является новый класс под названием X509Certificate2, который происходит от X509Certificate. Методы доступа к X509 поля сертификатов устарели, и теперь класс свойства для доступа к этим полям. Кроме того, если сертификат имеет связанный закрытый ключ, тогда класс дает доступ к этому ключу. Существуют методы, которые позволяют вам предоставить пароль, если частный ключ защищен одним. Пароль передается через SecureString параметр, который является особым типом, который гарантирует, что когда объект больше не используется, память, которую она занимает, будет написана так что пароль не может быть прочитан другим процессом на машине. Защищенные строки и другие формы защищенных данных будут в дальнейшем.

Так как X509Certificate2 происходит от X509Certificate, это означает, что вы может вызвать статические методы CreateFromeCertFile и CreateFromSignedFile через класс X509Certificate2. Однако, эти методы возвращают объект X509Certificate, и вы не можете передайте его объекту X509Certificate2. Класс X509Certificate имеет был улучшен в версии 3.0/2.0: он предоставляет свойства для доступа некоторые из полей X509; он предоставляет методы импорта и экспорта для инициализировать объект из байтового массива или генерировать массив байтов из сертификат, и он имеет конструкторы, которые будут создавать объект из файла (ASN.1 DER) и из массива байтов. Интересно отметить, что Класс X509Certificate2 имеет конструктор, который может создавать Объект X509Certificate2 объекта X509Certificate. Обратите внимание, что хотя объект X509Certificate может показывать только поля X509v1. могут быть созданы из сертификата X509v3, поэтому, если вы создаете Объект X509Certificate2 из объекта X509Certificate вы будете доступ к полям X509v3.

Ответ 3

Чтобы преобразовать сертификат X.509 из "X509Certificate" в "X509Certificate2", попробуйте что-то вроде этого:

X509Certificate  X509  = sslStream.RemoteCertificate;
X509Certificate2 X5092 = new X509Certificate2(X509);