首頁  >  文章  >  後端開發  >  如何從 Go 中的 X.509 憑證中提取完整的主題專有名稱?

如何從 Go 中的 X.509 憑證中提取完整的主題專有名稱?

DDD
DDD原創
2024-11-01 02:18:02267瀏覽

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

/C=US/O=some organization/OU=unit/CN=common name

getDNFromCert 函數將傳回以下字串:此方法提供了一種簡單有效的方法來從Go 中的X509 憑證中提取完整的主題或頒發者DN。它簡化了任務並消除了手動字串操作的需要。

以上是如何從 Go 中的 X.509 憑證中提取完整的主題專有名稱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn