Исходные коды в https://golang.org/src/encoding/asn1/asn1.go define:
// An ObjectIdentifier represents an ASN.1 OBJECT IDENTIFIER.
type ObjectIdentifier []int
Таким образом, идентификатор объекта (сокращенно OID) представляет собой массив целых чисел.Модуль asn1 имеет методы для их анализа, например parseObjectIdentifier
.
. Это структура, которую нужно поместить после атрибута Id:
.
Но теперь вам нужно выяснить OIDвы хотите.
Несмотря на трудность чтения, исходный код OpenSSL может показать вам OID многих вещей в мирах X.400 / X.500 / X.509 или, по крайней мере, те, которые известны OpenSSL.
Если вы перейдете на https://github.com/openssl/openssl/blob/1aec7716c1c5fccf605a46252a46ea468e684454/crypto/objects/obj_dat.h
и выполните поиск по nsCertType
, вы получите:
{"nsCertType", "Netscape Cert Type", NID_netscape_cert_type, 9, &so[407]},
so
, определенный ранее, и если вы прыгнете на его 407 th элемент, который вы видите:
0x60,0x86,0x48,0x01,0x86,0xF8,0x42,0x01,0x01, /* [ 407] OBJ_netscape_cert_type */
и выполнение окончательного поиска по OBJ_netscape_cert_type
в том же файле дает:
71, /* OBJ_netscape_cert_type 2 16 840 1 113730 1 1 */
, что означает, что соответствующий OID равен 2.16.840.1.113730.1.1
Или вы можете декодировать приведенный выше список целых чисел, описывающих этот OID (см. Как ASN.1 кодирует идентификатор объекта? для получения подробной информации).
- first
0x60
is 96
10 so 2*40 + 16
, что означает, что OID начинается с 2.16.
- , затем все остальные находятся в форме "base128":если старший значащий бит равен 1, объедините 7 младших значащих битов вместе всех следующих чисел, пока один не получит 0, поскольку старший значащий бит
0x86
равен 10000110
2 , поэтому необходимо0x48
иначе 01001000
2 так оно и есть на самом деле 00001101001000
2 или 840
10 0x01
- этоменьше 128, поэтому он сам по себе, 1
0x86
по-прежнему 10000110
2 , но должен быть в паре с обоими 0xF8
(11111000
2) и 0x42
(01000010
2 , и мы остановимся здесь, поскольку первый бит равен 0), поэтому 000011011110001000010
2 в целом или 113730
10 - и два последних
0x01
сами по себе, 1
.
, поэтому мы получаем снова 2.16.840.1.113730.1.1
Вы можете проверить это дваждыв некотором онлайн-браузере OID, например, здесь: http://oid -info.com / cgi-bin / display? oid = 2.16.840.1.113730.1.1 & action = display , который дает следующее описание для него:
Тип сертификата Netscape (a Рек.Расширение сертификата МСЭ-T X.509 v3, используемое для определения того, является ли субъект сертификата клиентом SSL, сервером SSL или Центром сертификации (ЦС)
Затем можно дажепросмотрите различные дуги, такие как netscape one или другие, чтобы найти другие OID.
Вы также получите полную запись ASN.1:
{joint-iso-itu-t(2) country(16) us(840) organization(1) netscape(113730) cert-ext(1) cert-type(1)}