Contents of this directory is archived and no longer updated.

Когда вы работаете с провайдером сертификатов (Cert:\) очень часто нужно прочитать какое-то расширение. Однако, на первый взгляд, они кажутся совершенно нечитабельными:

[↓] [vPodans] $cert = (dir cert:\CurrentUser\My)[1]
[↓] [vPodans] $cert.Extensions

EnhancedKeyUsages                                  Critical Oid                           RawData
-----------------                                  -------- ---                           -------
{Encrypting File System}                              False System.Security.Cryptograp... {48, 12, 6, 10...}
                                                      False System.Security.Cryptograp... {48, 31, 160, 29...}
                                                      False System.Security.Cryptograp... {48, 0}


[↓] [vPodans]

Если с первым ещё более-менее понятно, то что означают другие — не совсем понятно. Расширение в X509Certificate2 (не всегда, но чаще всего) состоят из 3-х свойств: флаг критичности расширения, OID расширения (т.е. что это за расширение) и значение этого расширения закодированном в ASN.1 формате:

[↓] [vPodans] $cert.Extensions[1].Oid

Value                                                       FriendlyName
-----                                                       ------------
2.5.29.17                                                   Subject Alternative Name


[↓] [vPodans] $cert.Extensions[1].RawData
48
31
160
29
6
10
43
6
1
<...>

Я взял второе расширение и посмотрел его OID — Subject Alternative Name. Чтобы прочитать значение этого расширения можно извратиться через COM интерфейсы CertEnroll (доступные только начиная с Windows Vista и выше). Но можно использовать метод Format() класса X509Extension:

[↓] [vPodans] $cert.Extensions[1].Format(1)
Other Name:
     Principal Name=vPodans@Thor

[↓] [vPodans] $cert.Extensions[1].Format(0)
Other Name:Principal Name=vPodans@Thor
[↓] [vPodans]

Метод может принимать аргумент $true или $false. Если $true, добавляется возврат каретки в каждую строку. Это очень удобно, если значение расширения многострочное (как SAN, CDP, AIA и т.д.). В противном случае весь текст будет в одну строку и он будет нечитабелен. Кстати говоря, вывод будет форматироваться точно так же, как вы его видите в графическом сертификате (со всеми отступами и т.д.):

[↓] [vPodans] $cert = Get-Item cert:\CurrentUser\CA\2BAC956C4EE47F9D5C1E05AE8ED7F95D47C21F80
[↓] [vPodans] $cert.Extensions[3].Format(1)
[1]CRL Distribution Point
     Distribution Point Name:
          Full Name:
               URL=http://EVSecure-crl.verisign.com/pca3-g5.crl

[↓] [vPodans]

Надеюсь, кому-то пригодится.


Share this article:

Comments:

Comments are closed.