Heim  >  Artikel  >  Backend-Entwicklung  >  Wie extrahiere ich den vollständigen Betreff- oder Aussteller-DN aus einem X509-Zertifikat in Go?

Wie extrahiere ich den vollständigen Betreff- oder Aussteller-DN aus einem X509-Zertifikat in Go?

DDD
DDDOriginal
2024-10-31 12:25:30744Durchsuche

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

Vollständigen Betreff oder Aussteller-DN aus X509-Zertifikat in Go abrufen

Abrufen des vollständigen Betreffs oder Aussteller-DN (Distinguished Name) aus einem X509-Zertifikat als Zeichenfolge kann mit wenigen Schritten erreicht werden.

Lösungsdetails:

  1. OIDs zu Attributnamen zuordnen:

    • Erstellen Sie eine Karte, um OIDs (Objektkennungen) mit Attributnamen zu verknüpfen.
  2. RDNSequence in String konvertieren:

    • Konvertieren Sie die RDNSequence (Relative Distinguished Name Sequence) in einen Abschnitt von Zeichenfolgen, wobei jede Zeichenfolge ein Attribut darstellt (z. B. „CN=Common Name“).
  3. Betreff-DN-Zeichenfolge erstellen:

    • Iterieren Sie über das Zeichenfolgensegment und erstellen Sie die Betreff-DN-Zeichenfolge, indem Sie die Attributnamen und -werte verketten.
  4. Funktion aufrufen:

    • Rufen Sie die Funktion getDNFromCert mit dem Zertifikatsbetreff oder -aussteller als Argument auf.

Beispielverwendung:

<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>

Funktionsdefinition:

<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>

Erwartete Ausgabe:

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

Das obige ist der detaillierte Inhalt vonWie extrahiere ich den vollständigen Betreff- oder Aussteller-DN aus einem X509-Zertifikat in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn