Maison >développement back-end >Golang >Comment extraire le nom distinctif complet du sujet d'un certificat X.509 dans 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!