ホームページ  >  記事  >  バックエンド開発  >  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>

関数の使用

x509Cert という名前の X509 証明書の場合、次のように 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 中国語 Web サイトの他の関連記事を参照してください。

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