Heim  >  Artikel  >  Backend-Entwicklung  >  Erstellen Sie eine CSR, in der die Organisationseinheiten durch Kommas statt durch Pluszeichen getrennt werden

Erstellen Sie eine CSR, in der die Organisationseinheiten durch Kommas statt durch Pluszeichen getrennt werden

WBOY
WBOYnach vorne
2024-02-09 11:15:091232Durchsuche

创建一个 CSR,其中 OU 用逗号而不是加号分隔

Bei der Verwendung eines SSL-Zertifikats ist das Erstellen einer CSR (Certificate Signing Request) ein wesentlicher Schritt. Ein wichtiger Parameter beim Erstellen einer CSR ist das Feld OU (Organisationseinheit). Typischerweise wird im OU-Feld ein Pluszeichen (+) verwendet, um verschiedene Organisationseinheiten zu trennen. Wenn Sie jedoch einen CSR korrekt erstellen möchten, sollten Sie, so der Vorschlag des PHP-Editors Banana, Kommas (,) verwenden, um verschiedene Organisationseinheiten zu trennen. Dadurch kann die Richtigkeit der CSR sichergestellt und Probleme während des Zertifikatsantragsprozesses vermieden werden. Denken Sie daher beim Erstellen einer CSR bitte daran, OU-Felder durch Kommas zu trennen, um die Genauigkeit des Zertifikats und eine reibungslose Anwendung sicherzustellen.

Frageninhalt

Ich versuche, mithilfe einer kryptografischen Bibliothek eine Zertifikatssignierungsanforderung in Go zu erstellen. Das Problem besteht darin, dass die OU des CSR, das es generiert, durch + getrennt ist, d. h.

Subject: O = Example Org, OU = OU1 + OU = OU2, CN = example.com

So generieren Sie beispielsweise CSR für OU getrennt durch

Subject: O = Example Org, OU = OU1, OU = OU2, CN = example.com

Das Generieren von durch + 分隔的 OU 似乎是 crypto lib 的默认行为。这可以使用加密库来完成吗?如果没有,那么是否有任何其他库可以生成CSR,其OU由 getrennten Organisationseinheiten scheint das Standardverhalten der crypto-Bibliothek zu sein. Kann dies mithilfe einer kryptografischen Bibliothek erfolgen? Wenn nicht, gibt es dann eine andere Bibliothek, die CSR mit OU, getrennt durch ,

, generieren kann?

Ich habe versucht, CSR mit dem folgenden Code zu generieren

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{
            CommonName:         "example.com",
            Organization:       []string{"Example Org"},
            OrganizationalUnit: []string{"OU1", "OU2"},
        },
        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))
}

Lösung

Weder „+“ noch „“, sind Teil des Zertifikats. Es wird verwendet, wenn eine für Menschen lesbare Zeichenfolgendarstellung einer Zertifikatsanforderung bereitgestellt wird.

Details: Ihr Code druckt lediglich die PEM-formatierte CSR-Datei aus, keine für Menschen lesbare Darstellung der Zertifikatsanforderung. Das Anzeigen dieser CSR mit asn1parse ergibt:

$ openssl asn1parse -in csr.pem 
   ...       
   37:d=4  hl=2 l=  10 cons: SEQUENCE          
   39:d=5  hl=2 l=   3 prim: OBJECT            :organizationalUnitName
   44:d=5  hl=2 l=   3 prim: PRINTABLESTRING   :OU1
   49:d=4  hl=2 l=  10 cons: SEQUENCE          
   51:d=5  hl=2 l=   3 prim: OBJECT            :organizationalUnitName
   56:d=5  hl=2 l=   3 prim: PRINTABLESTRING   :OU2
   61:d=3  hl=2 l=  20 cons: SET

Das sind also separate Objekte, keine kombinierte Zeichenfolge mit einem „+“ in der Mitte. Wenn Sie req verwenden, um eine Zertifikatsanforderung anzuzeigen, erscheint dieses „+“:

$ openssl req -in csr.pem -text 
Certificate Request:
    Data:
        Version: 1 (0x0)
        Subject: O = Example Org, OU = OU1 + OU = OU2, CN = example.com

Welches Trennzeichen hier verwendet wird, ist tatsächlich konfigurierbar. Sehen Sie sich openssl-namedisplay-options an und suchen Sie nach sep_comma_plus_space, dem Standardtrennzeichen. Dokumente zitieren:

Da haben Sie es also: Verwenden Sie Kommas zwischen verschiedenen RDNs (d. h. O, OU, CN, ...) und verwenden Sie Pluszeichen zwischen mehreren AVAs innerhalb desselben RDN (d. h. mehrere OUs). Außerdem wird unter keinen Umständen von der Verwendung mehrerer AVAs abgeraten.

Das obige ist der detaillierte Inhalt vonErstellen Sie eine CSR, in der die Organisationseinheiten durch Kommas statt durch Pluszeichen getrennt werden. 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