如何从 Go 中的 X509 证书中提取完整的主题 DN
从 X509 证书获取主题 DN(可分辨名称)或颁发者 DN在 Go 中作为字符串可能是一个挑战。不过,有一个方便的方法可以简化此任务。
解决方案
感谢同事的贡献,开发了一个名为 getDNFromCert 的自定义函数来提取X509 证书中的完整 DN。此函数采用 pkix.Name 命名空间作为输入,并返回 DN 的字符串表示形式:
<code class="go">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, fmt.Sprintf("%s=%s", 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 }</code>
使用函数
从X509证书名为x509Cert,您可以调用 getDNFromCert 函数:如下所示:
<code class="go">subj, err := getDNFromCert(x509Cert.Subject, "/") if err != nil { // Do error handling } fmt.Println(subj)</code>
示例输出
对于具有以下主题 DN 的示例证书:
CN=common name,OU=unit,O=some organization,C=US
getDNFromCert 函数将返回以下字符串:
/C=US/O=some organization/OU=unit/CN=common name
此方法提供了一种简单有效的提取方法Go 中 X509 证书的完整主体或颁发者 DN。它简化了任务并消除了手动字符串操作的需要。
以上是如何从 Go 中的 X.509 证书中提取完整的主题专有名称?的详细内容。更多信息请关注PHP中文网其他相关文章!