ホームページ  >  記事  >  バックエンド開発  >  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 (オブジェクト識別子) を属性に関連付けるマップを作成するnames.
  2. RDNSequence を文字列に変換します:

    • RDNSequence (相対識別名シーケンス) をスライスに変換します。文字列。各文字列は属性を表します (例: "CN=common name").
  3. Build Subject DN String:

    • 文字列のスライスを反復処理して、サブジェクト DN を構築します属性名と文字列を連結した文字列
  4. 関数の呼び出し:

    • 証明書のサブジェクトまたは発行者を指定して 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。