Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Isu memberikan maklumat ExtendedKeyUsage kepada CSR semasa membina dalam golang

Isu memberikan maklumat ExtendedKeyUsage kepada CSR semasa membina dalam golang

王林
王林ke hadapan
2024-02-09 15:03:18667semak imbas

在 golang 中生成期间向 CSR 提供​​ ExtendedKeyUsage 信息时出现问题

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.

Isi soalan

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

Penyelesaian

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)

Nilai

asn1keyusagecauth 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/ba​​qdaabmaogccqgsm49bamca0gameuciqdtbj+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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam