首页 > 后端开发 > Golang > 正文

如何从 Go 中的 X.509 证书中提取完整的主题专有名称?

DDD
发布: 2024-11-01 02:18:02
原创
285 人浏览过

How to Extract the Full Subject Distinguished Name from an X.509 Certificate in Go?

如何从 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!