Когда вы работаете с провайдером сертификатов (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]
Надеюсь, кому-то пригодится.
Comments: