在使用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中文網其他相關文章!