asn1 go(客户端证书授权)

asn1 go (client side cert auth)

我正在尝试让客户端证书授权工作,在阅读之后 https://developer.mozilla.org/en-US/docs/Web/HTML/Element/keygen 我意识到我需要解析一些 asn1。

我尝试使用的结构是这样的:

type PublicKeyAndChallenge struct {
    Spki asn1.BitString
    Challenge asn1.BitString
}

type SignedPublicKeyAndChallenge struct{
    PublicKeyAndChallenge PublicKeyAndChallenge
    SignitureAlgorithm  asn1.BitString
    Signiture asn1.BitString
}

我将 base64 编码的 asn1 解码为 [] 字节,然后我尝试将 asn1 解组到结构中。

signeeKeySigned := make([]byte, 2048)
    _ , err = base64.StdEncoding.Decode(signeeKeySigned, signeePubKeySigned)
    if ( err != nil ){
        log.Fatal(err)
    }   
    //Parse should be asn.1 encoded
    var signee SignedPublicKeyAndChallenge
    _, err = asn1.Unmarshal(signeeKeySigned, &signee)
    if err != nil {
        log.Fatal(err)
    }  

我收到一个结构错误,所以我相信我在 go 中的结构一定不正确,但我无法弄清楚。

我做了一些 duck duck going 并找到了提供 asn.1 定义的 rfc320 类 并且已经开始工作了!

现在的结构是:

type SubjectPublicKeyInfo struct {
    Algorithm pkix.AlgorithmIdentifier
    SubjectPublicKey asn1.BitString
}

type PublicKeyAndChallenge struct {
    Spki SubjectPublicKeyInfo
    Challenge string
}

type SignedPublicKeyAndChallenge struct{
    PublicKeyAndChallenge PublicKeyAndChallenge
    SignitureAlgorithm pkix.AlgorithmIdentifier
    Signiture asn1.BitString
}