来自x509证书的golang主题dn
发布时间:2020-12-16 09:27:30 所属栏目:大数据 来源:网络整理
导读:有没有简单的方法从x509证书中获取完整的主题DN(或发行者DN)作为字符串? 我无法在pkix.Name中找到任何类似“.String()”的方法 解决方法 解决方案(感谢同事): var oid = map[string]string{ "2.5.4.3": "CN","2.5.4.4": "SN","2.5.4.5": "serialNumber","2
有没有简单的方法从x509证书中获取完整的主题DN(或发行者DN)作为字符串?
我无法在pkix.Name中找到任何类似“.String()”的方法 解决方法
解决方案(感谢同事):
var oid = map[string]string{ "2.5.4.3": "CN","2.5.4.4": "SN","2.5.4.5": "serialNumber","2.5.4.6": "C","2.5.4.7": "L","2.5.4.8": "ST","2.5.4.9": "streetAddress","2.5.4.10": "O","2.5.4.11": "OU","2.5.4.12": "title","2.5.4.17": "postalCode","2.5.4.42": "GN","2.5.4.43": "initials","2.5.4.44": "generationQualifier","2.5.4.46": "dnQualifier","2.5.4.65": "pseudonym","0.9.2342.19200300.100.1.25": "DC","1.2.840.113549.1.9.1": "emailAddress","0.9.2342.19200300.100.1.1": "userid",} func getDNFromCert(namespace pkix.Name,sep string) (string,error) { subject := []string{} for _,s := range namespace.ToRDNSequence() { for _,i := range s { if v,ok := i.Value.(string); ok { if name,ok := oid[i.Type.String()]; ok { // <oid name>=<value> subject = append(subject,fmt.Sprintf("%s=%s",name,v)) } else { // <oid>=<value> if no <oid name> is found subject = append(subject,i.Type.String(),v)) } } else { // <oid>=<value in default format> if value is not string subject = append(subject,fmt.Sprintf("%s=%v",i.Type.String,v)) } } } return sep + strings.Join(subject,sep),nil } 调用函数: subj,err := getDNFromCert(x509Cert.Subject,"/") if err != nil { // do error handling } fmt.Println(subj) 输出(例子): /C=US/O=some organization/OU=unit/CN=common name 这似乎是唯一“简单”的解决方案 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |