Go:加载证书,使其成为* x509.Certificate(能够签署其他证书)

时间:2014-10-20 00:02:25

标签: go x509

我已经问过golang-nuts但没有回应

https://groups.google.com/forum/#!topic/golang-nuts/EhlpMiMAPSM

我不认为复制邮件正文会有多大意义,因为我不相信Google群组或链接会发生变化,第一封邮件的主体就足够了。

我有一个使用x509软件包生成的证书,这是一个由另一个CA证书签名的CA证书,该证书也是使用x509软件包生成的。 一气呵成。

打开文件 使用x509.CreateCertificate()创建der marshall pem with pem.Encode()

CA证书有效,也可以在各种浏览器中导入而无需投诉

openssl -text也报告可解析

我试过tls.LoadX509KeyPair() 和

func LoadX509KeyPair(certFile, keyFile string) (*x509.Certificate, *rsa.PrivateKey) {
    cf, e := ioutil.ReadFile(certFile)
    if e != nil {
        fmt.Println("cfload:", e.Error())
        os.Exit(1)
    }

    kf, e := ioutil.ReadFile(keyFile)
    if e != nil {
        fmt.Println("kfload:", e.Error())
        os.Exit(1)
    }
    cpb, cr := pem.Decode(cf)
    fmt.Println(string(cr))
    kpb, kr := pem.Decode(kf)
    fmt.Println(string(kr))
    crt, e := x509.ParseCertificate(cpb.Bytes)

    if e != nil {
        fmt.Println("parsex509:", e.Error())
        os.Exit(1)
    }
    key, e := x509.ParsePKCS1PrivateKey(kpb.Bytes)
    if e != nil {
        fmt.Println("parsekey:", e.Error())
        os.Exit(1)
    }
    return crt, key
}

然而,

parsex509:asn1:语法错误:数据被截断 退出状态1

如何加载证书以便我可以使用它将其他证书签名为* x509.Certificate类型?

可能有一些显而易见的东西我不知道,但是它是什么?

1 个答案:

答案 0 :(得分:2)

答案是:在问题中完成的方式是正确的方法。

问题或错误仍然存​​在于证书创建中,因此在“如何加载证书”的问题范围内,问题得到了解答。