Rumah > Artikel > pembangunan bahagian belakang > Isu memberikan maklumat ExtendedKeyUsage kepada CSR semasa membina dalam golang
Semasa penjanaan CSR di golang, terdapat isu memberikan maklumat kepada ExtendedKeyUsage. Isu ini mungkin menjejaskan ketepatan dan kesahihan CSR yang dijana. ExtendedKeyUsage ialah sebahagian daripada sambungan sijil dan digunakan untuk menentukan tujuan penggunaan sijil. Dengan memberikan maklumat ExtendedKeyUsage yang betul kepada CSR, ketersediaan dan keselamatan sijil dalam senario tertentu boleh dipastikan. Walau bagaimanapun, dalam golang, kadangkala anda menghadapi masalah bahawa maklumat ExtendedKeyUsage tidak dapat diberikan dengan betul semasa menjana CSR. Editor PHP Xigua akan memperkenalkan punca dan penyelesaian masalah ini secara terperinci dalam artikel ini untuk membantu pembaca menyelesaikan masalah yang sama dan berjaya menjana CSR yang memenuhi keperluan.
Saya terjumpa masalah pelik. Saya sedang menulis alat golang kecil yang menjana csr berdasarkan beberapa input yang disediakan pengguna. Saya kebanyakannya berjaya mencapai matlamat saya, tetapi menghadapi masalah dengan extendedkeyusage. Ringkasnya, ia tidak berfungsi.
kod asn1 marshaling untuk beberapa medan x509:
var oidemailaddress = asn1.objectidentifier{1, 2, 840, 113549, 1, 9, 1} var oidextensionkeyusage = asn1.objectidentifier{2, 5, 29, 15} var oidextensionextendedkeyusage = asn1.objectidentifier{2, 5, 29, 37} asn1keyusagedigsig, err := asn1.marshal(asn1.bitstring{ bytes: []byte{byte(x509.keyusagedigitalsignature)}, bitlength: 8, }) asn1keyusagedatenc, err := asn1.marshal(asn1.bitstring{ bytes: []byte{byte(x509.keyusagedataencipherment)}, bitlength: 8, }) asn1keyusagecauth, err := asn1.marshal(asn1.bitstring{ bytes: []byte{byte(x509.extkeyusageclientauth)}, bitlength: 8, }) if err != nil { error.fatalf("can't serialize extended key usage %s", err) }
Kemudian saya mencipta templat dan berjaya menjana serta menyimpan csr, hampir:
template := x509.certificaterequest{ rawsubject: asn1subj, emailaddresses: []string{emailaddress}, signaturealgorithm: _sigalg, extraextensions: []pkix.extension{ { id: oidextensionextendedkeyusage, value: asn1keyusagecauth, }, { id: oidextensionkeyusage, critical: true, value: asn1keyusagedatenc, }, { id: oidextensionkeyusage, critical: true, value: asn1keyusagedigsig, }, }, } csrbytes, _ := x509.createcertificaterequest(rand.reader, &template, privatekey)
and here is an openssl req -in my_output.csr -text -noout
****** asn1 oid: prime256v1 nist curve: p-256 attributes: requested extensions: x509v3 subject alternative name: email:[email protected] x509v3 extended key usage: .... x509v3 key usage: critical key agreement x509v3 key usage: critical encipher only signature algorithm: ecdsa-with-sha256 ******
extendedkeyusage saya kosong, sedangkan ia sepatutnya pengesahan pelanggan. Apa yang saya buat salah?
Saya tidak sabar untuk melihat:
X509v3 Extended Key Usage: ClientAuthentication
Saya nampak medan kosong. Saya cuba menggunakan set bait yang berbeza daripada oid lain tetapi masih tiada hasil. Ia seperti medan extendedkeyusage tidak membenarkan apa-apa ditulis (walaupun sepatutnya)
Jika ia diimport:
Versi: go1.19.3 darwin/amd64
Saya rasa masalahnya ialah semasa mencetak data. Kunci/nilai sebenarnya wujud dalam data.
Daripada kod:
var oidextensionextendedkeyusage = asn1.objectidentifier{2, 5, 29, 37} asn1keyusagecauth, err := asn1.marshal(asn1.bitstring{ bytes: []byte{byte(x509.extkeyusageclientauth)}, bitlength: 8, }) extraextensions: []pkix.extension{ { id: oidextensionextendedkeyusage, //critical: true, value: asn1keyusagecauth, //value: {2, 5, 29, 15}, },
oidextensionextendedkeyusage ialah asn.1 oid 2.5.29.37 yang apabila dikodkan menggunakan der encoder akan menjadi "55 1d 25"
Anda boleh mengekodnya dalam talian untuk melihat binari yang akan dihasilkannya (cth https://www.php.cn/link/8e08227323cd829e449559bb381484b7)
Nilaiasn1keyusagecauth ialah 2 (tetap ditakrifkan dalam x509.go), yang akan menjadi "00 02" apabila dikodkan kepada rentetan asn.1 bit menggunakan pengekod der (00 pertama ialah bilangan bit padding (tiada), 02 ialah digit padding ) nilai 2)
Sekarang dapatkan nilai base64 permintaan sijil dan nyahkodnya menggunakan penyahkod asn.1 der (cth: https://asn1.io/asn1playground)
miibtzccav0caqawgzwxczajbgnvbaytakfvmq8wdqydvqqiewztewruzxkxdzan bgnvbactbln5zg5letetmbega1uechmkc210aensawvuddelmakga1uecxmcsvqx jtajbgnvbamthhntdggtq2xpzw50lvk4cdg1bk1psvnzmgliz0exijagbgkqhkig 9w0bcqeme3ntdghjbgllbnrac210ac5jb20wwtatbgcqhkjopqibbggqhkjopqmb bwncaar4riguoxsyxdaml9f9e2grjumuk8q0jilotb2kadmbz1rocedszuuxkqcr 0vud2aw3vidph1ar4hkqwkm43hxqof4wxayjkozihvcnaqkomu8wttaebgnvhree fzavgrnzbxroy2xpzw50qhntdgguy29tmasga1udjqqeawiiaajaobgnvhq8baf8e bamcaagwdgydvr0paqh/baqdaabmaogccqgsm49bamca0gameuciqdtbj+0atjy f1gy8am2mv7/x3tsebmmvdszkw8l6rvseqigmih8co9nkp0axdmgp9x4kvjjzk9x rw3roydt89d73oa=
try the full power of oss' asn-1step by downloading a free trial oss nokalva tlv print utility version 8.6.1 copyright (c) 1997-2022 oss nokalva, inc. all rights reserved. 30 8201b7(439) 30 82015d(349) 02 01 00 30 819c(156) 31 0b 30 09 06 03 550406 13 02 4155 31 0f 30 0d 06 03 550408 13 06 5379646e6579 31 0f 30 0d 06 03 550407 13 06 5379646e6579 31 13 30 11 06 03 55040a 13 0a 736d7468436c69656e74 31 0b 30 09 06 03 55040b 13 02 4954 31 25 30 23 06 03 550403 13 1c 736d74682d436c69656e742d59387038356e4d694953733069486741 31 22 30 20 06 09 2a864886f70d010901 0c 13 736d7468636c69656e7440736d74682e636f6d 30 59 30 13 06 07 2a8648ce3d0201 06 08 2a8648ce3d030107 03 42 000478ac88143b14b25dd68c2fd17d7b68118ee3142bc4348e29684dbda401d9... a0 5e 30 5c 06 09 2a864886f70d01090e 31 4f 30 4d 30 1e 06 03 551d11 04 17 30158113736d7468636c69656e7440736d74682e636f6d 30 0b -- here it is! 06 03 551d25 04 04 03020002 30 0e 06 03 551d0f 01 01 ff 04 04 03020008 30 0e 06 03 551d0f 01 01 ff 04 04 03020001 30 0a 06 08 2a8648ce3d040302 03 48 003045022100d3063fb402d8f2175198f0033632feff5f7b6c11b98c55db332b0f25... results to get more details, please provide/compile a schema for your data.
Tatal keluaran di atas sehingga anda dapati di sini!
Kunci/nilai anda ialah:
30 0B -- a SEQUENCE of 11 bytes 06 03 551D25 -- an item of 3 bytes (551D25 ... OidExtensionExtendedKeyUsage) 04 04 03020002 -- an item of 4 bytes (03 02 0002 ... an item of 2 bytes 0002 ... asn1KeyUsageCAuth)
Saya ingin menyahkod csr mengikut spek asn.1...tapi tak jumpa :(
Atas ialah kandungan terperinci Isu memberikan maklumat ExtendedKeyUsage kepada CSR semasa membina dalam golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!