Go версия go1.18.4, darwin/arm64
Я создаю сертификат x509.
Когда я анализирую сгенерированный сертификат pem, используя
asn1parse -in
Я вижу общее имя как PRINTABLESTRING вместо UTF8STRING.
31:d=4 hl=2 l= 13 cons: SEQUENCE
33:d=5 hl=2 l= 3 prim: OBJECT :commonName
38:d=5 hl=2 l= 6 prim: PRINTABLESTRING :golang
Насколько я понимаю, в golang строка по умолчанию utf8, но сертификат все равно показывает ее как PRINTABLESTRING
Код доступен по ссылке GO play
Также, когда я помещаю некоторые символы, такие как é um, я вижу это как UTF8STRING.
Есть ли способ поместить значения OID как UTF8STRING вместо PRINTABLESTRING?
Пакет Go asn1 будет использовать UTF8STRING только в том случае, если строка требует этого. В этом нет ничего плохого по своей сути, и кажется, что позволить библиотеке сделать этот выбор нормально.
Тем не менее, если вы действительно хотите использовать UTF8STRING, вы можете использовать asn1.RawValue для достижения этой цели:
name, err := asn1.MarshalWithParams("golang", "utf8")
if err != nil {
// handle error
}
pkixAttrTypeValue := []pkix.AttributeTypeAndValue{
{
Type: COMMON_NAME,
Value: asn1.RawValue{FullBytes: name},
},
}