Maison  >  Article  >  développement back-end  >  Créez un CSR dans lequel les unités d'organisation sont séparées par des virgules au lieu de signes plus

Créez un CSR dans lequel les unités d'organisation sont séparées par des virgules au lieu de signes plus

WBOY
WBOYavant
2024-02-09 11:15:091284parcourir

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

在使用SSL证书时,创建一个CSR(证书签名请求)是必不可少的一步。而在创建CSR时,有一个重要的参数是OU(组织单位)字段。通常情况下,OU字段使用加号(+)来分隔不同的组织单位。然而,根据php小编香蕉的建议,如果要正确创建CSR,应该使用逗号(,)来分隔不同的组织单位。这样做可以确保CSR的正确性,避免在证书申请过程中出现问题。因此,在创建CSR时,请记得使用逗号分隔OU字段,以确保证书的准确性和顺利申请。

问题内容

我正在尝试使用加密库在 go 中创建证书签名请求。问题是它生成的 CSR 的 OU 由 + 分隔,即

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

如何生成由 分隔的 OU 的 CSR,例如

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

生成由 + 分隔的 OU 似乎是 crypto lib 的默认行为。这可以使用加密库来完成吗?如果没有,那么是否有任何其他库可以生成CSR,其OU由分隔

我尝试使用下面的代码生成 CSR

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

解决方法

“+”和“,”都不是证书的一部分。它正是在提供证书请求的人类可读字符串表示形式时使用的。

详细信息:您的代码只是打印出 PEM 格式的 CSR 文件,而不是人类可读的证书请求表示形式。使用 asn1parse 查看此 CSR 会得出:

$ 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

因此,这些是单独的对象,而不是中间有“+”的组合字符串。当使用 req 显示证书请求时,会出现此“+”:

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

这里使用哪个分隔符实际上可以进行配置。请参阅 openssl-namedisplay-options 并查找 sep_comma_plus_space ,这是默认分隔符。引用文档:

所以你已经明白了:在不同的 RDN(即 O、OU、CN、...)之间使用逗号,而在同一 RDN 内的多个 AVA 之间使用加号(如多个 OU)。另外,无论如何都不鼓励使用多个 AVA。

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
Article précédent:Remplacez "." par "_" GolangArticle suivant:Remplacez "." par "_" Golang