Heim >Backend-Entwicklung >Golang >Erstellen Sie CSR mit einer bestimmten Themenreihenfolge in go

Erstellen Sie CSR mit einer bestimmten Themenreihenfolge in go

WBOY
WBOYnach vorne
2024-02-13 13:33:081271Durchsuche

在 go 中创建具有特定主题顺序的 CSR

In der Go-Sprache ist das Erstellen eines CSR (Certificate Signing Request) mit einer bestimmten Betreffreihenfolge eine wichtige Aufgabe. Eine CSR ist eine Datei, die zur Beantragung eines digitalen Zertifikats bei einer Zertifizierungsstelle (CA) verwendet wird. Durch die korrekte Erstellung der CSR können wir sicherstellen, dass die Themen im Zertifikat (z. B. Domänenname, Organisationsname usw.) gemäß unseren Anforderungen geordnet sind. In der Go-Sprache können wir das x509-Paket verwenden, um CSR zu erstellen und zu verarbeiten. In diesem Artikel stellt Ihnen der PHP-Editor Xiaoxin die detaillierten Schritte vor, die Ihnen dabei helfen, ganz einfach ein CSR mit einer bestimmten Themenreihenfolge in Go zu erstellen.

Frageninhalt

Ich versuche, mithilfe einer kryptografischen Bibliothek eine Zertifikatssignierungsanforderung in Go zu erstellen. Die von generierte CSR hat den Betreff „Betreff: C = IN, L = loc, O = Beispielorganisation, OU = OU1 + OU = OU2, CN = example.com“. Ich möchte die Reihenfolge der Themen in „Themen: C=IN, O=Beispielorganisation, OU=OU1 + OU=OU2, L=loc, CN=beispiel.com“ ändern.

Ich habe die CSR mit dem folgenden Code generiert.

package main

import (
    "crypto/rand"
    "crypto/rsa"
    "crypto/x509"
    "crypto/x509/pkix"
    "encoding/pem"
    "fmt"
    "os"
)

func main() {
    privKey, err := rsa.GenerateKey(rand.Reader, 2048)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }

    csrTemplate := x509.CertificateRequest{
        Subject: pkix.Name{
            Country:            []string{"IN"},
            Organization:       []string{"Example Org"},
            OrganizationalUnit: []string{"OU1", "OU2"},
            Locality:           []string{"loc"},
            CommonName:         "example.com",
        },
        EmailAddresses: []string{"[email protected]"},
    }

    csrBytes, err := x509.CreateCertificateRequest(rand.Reader, &csrTemplate, privKey)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }

    csrPem := pem.EncodeToMemory(&pem.Block{
        Type:  "CERTIFICATE REQUEST",
        Bytes: csrBytes,
    })

    fmt.Println(string(csrPem))
}

Dieser Code generiert eine CSR mit dem Betreff „Betreff: C = IN, L = loc, O = Beispielorganisation, OU = OU1 + OU = OU2, CN = example.com“. Mit dem folgenden Openssl-Befehl kann ich eine CSR mit der gewünschten Themenreihenfolge generieren

openssl req -new -sha256 -key my-private-key.pem -out my-csr1.pem -subj '/C=IN/O=Org/OU=OU1/OU=OU2/L=loc/CN=example.com'

Wie mache ich dasselbe in Go?

Workaround

Ich bin mir nicht sicher, warum Sie die RDNs im Thema in dieser speziellen Reihenfolge platzieren möchten. Meiner Meinung nach ist jede Software, die auf einer bestimmten Reihenfolge basiert, etwas kaputt. Natürlich gibt es defekte Software, und manchmal besteht die einzige Möglichkeit darin, sie zu reparieren.

Es gibt auch eine Möglichkeit, dies mit Golang zu tun. Sie können jedoch nicht einfach die passenden Feldnamen in pkix.Name verwenden, da diese Namen in einer festen Reihenfolge serialisiert werden. Um Ihre eigene Bestellung zu erhalten, müssen Sie ExtraNames verwenden und dann die RDNs in der von Ihnen benötigten Reihenfolge angeben:

var (
        oidCountry            = []int{2, 5, 4, 6}
        oidOrganization       = []int{2, 5, 4, 10}
        oidOrganizationalUnit = []int{2, 5, 4, 11}
        oidCommonName         = []int{2, 5, 4, 3}
        oidLocality           = []int{2, 5, 4, 7}
    )
    csrTemplate := x509.CertificateRequest{
        Subject: pkix.Name{
            ExtraNames: []pkix.AttributeTypeAndValue{
                { oidCountry, "IN" },
                { oidOrganization, "Example Org" },
                { oidOrganizationalUnit, "OU1" },
                { oidOrganizationalUnit, "OU2" },
                { oidLocality, "loc" },
                { oidCommonName, "example.com" },
            },
        },
        EmailAddresses: []string{"<a href="https://www.php.cn/link/89fee0513b6668e555959f5dc23238e9" class="__cf_email__" data-cfemail="4b3f2e383f0b2e332a263b272e65282426">[email&#160;protected]</a>"},
    }

Das obige ist der detaillierte Inhalt vonErstellen Sie CSR mit einer bestimmten Themenreihenfolge in go. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen