首頁  >  文章  >  後端開發  >  如何從 Go 中的 X509 憑證中提取完整的主題或頒發者 DN?

如何從 Go 中的 X509 憑證中提取完整的主題或頒發者 DN?

DDD
DDD原創
2024-10-31 12:25:30744瀏覽

How to Extract the Complete Subject or Issuer DN from an X509 Certificate in Go?

從Go 中的X509 憑證擷取完整的主題或發行者DN

從X509 憑證擷取完整的主題或發行者可分辨名稱(DN)作為字串,只需幾個步驟即可完成。

解決方案詳細資料:

  1. 將OID 對應到屬性名稱:

      將OID 對應到屬性名稱:
  2. 建立一個映射以將OID(物件標識符)與屬性名稱相關聯。
    • 將RDNSequence 轉換為字串:
  3. 將RDNSequence(相對可分辨名稱序列)轉換為字串名稱序列切片,其中每個字串代表一個屬性(例如,“CN=通用名稱”)。
    • 建立主題DN 字串:
  4. 迭代字串切片並透過連接屬性名稱和值來建立主題DN 字串。
    • 呼叫函數:
  5. 以憑證主題或頒發者作為參數呼叫 getDNFromCert 函數。

<code class="go">func main() {
    // Obtain the X509 certificate
    x509Cert, err := LoadCert(pemBytes)
    if err != nil {
        // Handle error
    }

    // Retrieve subject DN
    subj, err := getDNFromCert(x509Cert.Subject, "/")
    if err != nil {
        // Handle error
    }

    fmt.Println("Subject DN:", subj)
}</code>
用法示例:

<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 {
                subject = append(subject, fmt.Sprintf("%v=%v", i.Type.String(), v))
            } else {
                subject = append(subject, fmt.Sprintf("%v=%v", i.Type.String(), i.Value))
            }
        }
    }
    return sep + strings.Join(subject, sep), nil
}</code>
函數定義:

Subject DN: /C=US/O=some organization/OU=unit/CN=common name
預期輸出:

以上是如何從 Go 中的 X509 憑證中提取完整的主題或頒發者 DN?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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