首頁 >後端開發 >Golang >建立一個 CSR,其中 OU 用逗號而不是加號分隔

建立一個 CSR,其中 OU 用逗號而不是加號分隔

WBOY
WBOY轉載
2024-02-09 11:15:091323瀏覽

创建一个 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。

以上是建立一個 CSR,其中 OU 用逗號而不是加號分隔的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除