Maison > développement back-end > Golang > Comment extraire le DN complet du sujet ou de l'émetteur d'un certificat X509 en Go ?

Comment extraire le DN complet du sujet ou de l'émetteur d'un certificat X509 en Go ?

DDD
Libérer: 2024-10-31 12:25:30
original
904 Les gens l'ont consulté

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

Récupérer le DN complet du sujet ou de l'émetteur à partir du certificat X509 dans Go

Récupérer le nom distinctif (DN) complet du sujet ou de l'émetteur à partir d'un certificat X509 en tant que chaîne peut être réalisé en quelques étapes.

Détails de la solution :

  1. Mapper les OID aux noms d'attribut :

    • Créez une carte pour associer des OID (identifiants d'objet) aux noms d'attribut.
  2. Convertir RDNSequence en chaîne :

    • Convertissez la RDNSequence (Relative Distinguished Name Sequence) en une tranche de chaînes, où chaque chaîne représente un attribut (par exemple, "CN=common name").
  3. Construire la chaîne DN du sujet :

    • Parcourir la tranche de chaînes et construire la chaîne DN du sujet en concaténant les noms et les valeurs d'attribut.
  4. Appelez la fonction :

    • Invoquez la fonction getDNFromCert avec le sujet ou l'émetteur du certificat comme argument.

Exemple d'utilisation :

<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>
Copier après la connexion

Définition de la fonction :

<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>
Copier après la connexion

Sortie attendue :

Subject DN: /C=US/O=some organization/OU=unit/CN=common name
Copier après la connexion

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal