在Go语言中,创建具有特定主题顺序的CSR(证书签名请求)是一项重要的任务。CSR是用于向证书颁发机构(CA)申请数字证书的文件。通过正确地创建CSR,我们可以确保证书中的主题(如域名、组织名称等)按照我们的要求进行排序。在Go语言中,我们可以使用x509包来创建和处理CSR。本文将由php小编小新为您介绍详细步骤,以帮助您在Go中轻松创建具有特定主题顺序的CSR。
我正在尝试使用加密库在 go 中创建证书签名请求。由 生成的 CSR 的主题为“主题:C = IN、L = loc、O = Example Org、OU = OU1 + OU = OU2、CN = example.com”。我想将主题的顺序更改为“主题:C = IN,O = Example Org,OU = OU1 + OU = OU2,L = loc,CN = example.com”。
我使用以下代码生成了 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{ 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)) }
此代码生成主题为“主题:C = IN、L = loc、O = 示例组织、OU = OU1 + OU = OU2、CN = example.com”的 CSR。我可以使用下面的 openssl 命令生成具有所需主题顺序的 CSR
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'
如何在 Go 中做同样的事情?
我不清楚为什么你想以这个特定的顺序将 RDN 放在主题中。我认为,任何依赖于特定顺序的软件都有些损坏。当然,损坏的软件是存在的,有时唯一的方法就是解决它。
也有一种方法可以使用 golang 来做到这一点。但您不能简单地使用 pkix.Name 中的匹配字段名称,因为这些名称将以固定顺序序列化。要获得您自己的订单,您需要使用 ExtraNames
,然后按照您需要的顺序提供 RDN:
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 protected]</a>"}, }
以上是在 go 中创建具有特定主题顺序的 CSR的详细内容。更多信息请关注PHP中文网其他相关文章!