Maison  >  Article  >  développement back-end  >  Créez un CSR avec un ordre de sujet spécifique en cours

Créez un CSR avec un ordre de sujet spécifique en cours

WBOY
WBOYavant
2024-02-13 13:33:081192parcourir

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

En langage Go, créer un CSR (Certificate Signing Request) avec un ordre de sujet spécifique est une tâche importante. Un CSR est un fichier utilisé pour demander un certificat numérique auprès d'une autorité de certification (CA). En créant correctement le CSR, nous pouvons garantir que les sujets du certificat (tels que le nom de domaine, le nom de l'organisation, etc.) sont classés conformément à nos exigences. En langage Go, nous pouvons utiliser le package x509 pour créer et traiter le CSR. Dans cet article, l'éditeur php Xiaoxin vous présentera les étapes détaillées pour vous aider à créer facilement un CSR avec un ordre de thème spécifique dans Go.

Contenu de la question

J'essaie de créer une demande de signature de certificat en go à l'aide d'une bibliothèque cryptographique. Le sujet du CSR généré par est "Sujet : C = IN, L = loc, O = Exemple d'organisation, OU = OU1 + OU = OU2, CN = exemple.com". Je souhaite modifier l'ordre des sujets en "Sujets : C=IN, O=Example Org, OU=OU1 + OU=OU2, L=loc, CN=example.com".

J'ai généré le CSR en utilisant le code suivant.

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

Ce code génère un CSR avec pour sujet "Sujet : C = IN, L = loc, O = exemple d'organisation, OU = OU1 + OU = OU2, CN = exemple.com". Je peux générer un CSR avec l'ordre des sujets souhaité en utilisant la commande openssl ci-dessous

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'

Comment faire la même chose dans Go ?

Solution de contournement

Je ne sais pas pourquoi vous souhaitez mettre les RDN dans le sujet dans cet ordre spécifique. À mon avis, tout logiciel qui repose sur une commande spécifique est quelque peu défectueux. Bien sûr, les logiciels défectueux existent, et parfois le seul moyen est de les réparer.

Il existe également un moyen de le faire en utilisant Golang. Mais vous ne pouvez pas simplement utiliser les noms de champs correspondants dans pkix.Name car ces noms seront sérialisés dans un ordre fixe. Pour obtenir votre propre commande, vous devez utiliser ExtraNames puis fournir les RDN dans l'ordre dont vous avez besoin :

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>"},
    }

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer