asn1 go(客户端证书认证)

时间:2015-01-16 20:46:43

标签: ssl data-structures go unmarshalling asn.1

我正在努力让客户端证书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)
    }  

我遇到了结构错误,所以我相信我的结构一定不是正确的,但我无法弄明白。

1 个答案:

答案 0 :(得分:0)

我做了一些鸭子去找到了rfc320,它提供了asn.1类的定义并且让它起作用了!

结构现在是:

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
}