ホームページ  >  記事  >  バックエンド開発  >  Go で X.509 証明書からサブジェクト DN を抽出するにはどうすればよいですか?

Go で X.509 証明書からサブジェクト DN を抽出するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-02 15:07:30404ブラウズ

How to Extract the Subject DN from an X.509 Certificate in Go?

Go で X.509 証明書からサブジェクト DN を抽出する

問題

サブジェクト DN (または発行者 DN) の文字列表現を生成するGo で X.509 証明書から取得するのは困難な場合があります。 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 {
                    subject = append(subject, fmt.Sprintf("%s=%s", name, v))
                } else {
                    subject = append(subject, fmt.Sprintf("%s=%s", i.Type.String(), v))
                }
            } else {
                subject = append(subject, fmt.Sprintf("%s=%v", i.Type.String, v))
            }
        }
    }
    return sep + strings.Join(subject, sep), nil
}</code>

使用法

証明書からサブジェクト DN を取得するには、次のように getDNFromCert 関数を呼び出します。

<code class="go">subj, err := getDNFromCert(x509Cert.Subject, "/")
if err != nil {
   // error handling
}
fmt.Println(subj)</code>

出力例

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

以上がGo で X.509 証明書からサブジェクト DN を抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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