Maison >développement back-end >Golang >Comment extraire le nom distinctif complet du sujet d'un certificat X.509 dans Go ?

Comment extraire le nom distinctif complet du sujet d'un certificat X.509 dans Go ?

DDD
DDDoriginal
2024-11-01 02:18:02349parcourir

How to Extract the Full Subject Distinguished Name from an X.509 Certificate in Go?

Comment extraire le DN complet du sujet des certificats X509 dans Go

Obtention du DN du sujet (nom distinctif) ou du DN de l'émetteur à partir d'un certificat X509 dans Go, une chaîne peut être un défi. Il existe cependant une méthode pratique qui peut simplifier cette tâche.

Solution

Grâce aux contributions d'un collègue, une fonction personnalisée appelée getDNFromCert a été développée pour extraire le DN complet à partir d’un certificat X509. Cette fonction prend un espace de noms pkix.Name en entrée et renvoie une représentation sous forme de chaîne du 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>

Utilisation de la fonction

Pour extraire le DN du sujet d'un Certificat X509 nommé x509Cert, vous pouvez appeler la fonction getDNFromCert comme suit :

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

Exemple de sortie

Pour un exemple de certificat avec le sujet DN suivant :

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

La fonction getDNFromCert renverra la chaîne suivante :

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

Cette méthode fournit un moyen simple et efficace d'extraire le DN complet du sujet ou de l'émetteur d'un certificat X509 dans Go. Cela simplifie la tâche et élimine le besoin de manipulation manuelle des chaînes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn