Erstellen Sie CSR mit einer bestimmten Themenreihenfolge in go

WBOY
Freigeben: 2024-02-13 13:33:08
nach vorne
1217 Leute haben es durchsucht

在 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))
}
Nach dem Login kopieren

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'
Nach dem Login kopieren

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>"},
    }
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!