在 go 中创建具有特定主题顺序的 CSR
在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中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Go爬虫Colly中的Queue线程问题探讨在使用Go语言的Colly爬虫库时,开发者常常会遇到关于线程和请求队列的问题。�...

Go语言中用于浮点数运算的库介绍在Go语言(也称为Golang)中,进行浮点数的加减乘除运算时,如何确保精度是�...

GoLand中自定义结构体标签不显示怎么办?在使用GoLand进行Go语言开发时,很多开发者会遇到自定义结构体标签在�...

Go语言中字符串打印的区别:使用Println与string()函数的效果差异在Go...

Go语言中哪些库是大公司开发或知名开源项目?在使用Go语言进行编程时,开发者常常会遇到一些常见的需求,�...

Go语言中使用RedisStream实现消息队列时类型转换问题在使用Go语言与Redis...

Go语言中结构体定义的两种方式:var与type关键字的差异Go语言在定义结构体时,经常会看到两种不同的写法:一�...

Go指针语法及viper库使用中的寻址问题在使用Go语言进行编程时,理解指针的语法和使用方法至关重要,尤其是在...
