golang解析数字证书

golang解析数字证书,第1张

概述golang解析数字证书 基础知识 在解析数字证书之前我们要学习一下数字证书的知识,明白一下数字证书中的一些概念。 下面这些知识是你所要了解的,PKCS#8、 PKCS#1、Certificate Chan、Openssl 将PKCS#1和PKCS#8进行转换 等等,基础我就不多聊了下面给几篇文章用于快速扫盲: pkcs1与pkcs8格式RSA私钥互相转换 证书链-Digital Certific golang解析数字证书 基础知识

在解析数字证书之前我们要学习一下数字证书的知识,明白一下数字证书中的一些概念。
下面这些知识是你所要了解的,PKCS#8、 PKCS#1、Certificate Chan、Openssl 将PKCS#1和PKCS#8进行转换 等等,基础我就不多聊了下面给几篇文章用于快速扫盲:

pkcs1与pkcs8格式RSA私钥互相转换
证书链-Digital Certificates
数字证书、公钥和私钥这三者之间的关系是什么
证书链-Digital Certificates
数字签名是什么?
PKCS简介

golang解析数字证书和PKCS#1&PKCS#8格式的私钥

直接贴代码,下面代码以及我生成的证书、PKCS#1、pkcs#8格式的私钥连同项目一起打包在后面@H_301_20@

package mainimport (    // "crypto/rsa"    "crypto/tls"    "crypto/x509"    "enCoding/pem"    "fmt"    "io/IoUtil")func parseCert(crt,privateKey string) *tls.Certificate {    var cert tls.Certificate    //加载PEM格式证书到字节数组    certPEMBlock,err := IoUtil.Readfile(crt)    if err != nil {        return nil    }    //获取下一个pem格式证书数据 -----BEGIN CERTIFICATE----- -----END CERTIFICATE-----    certDERBlock,restPEMBlock := pem.Decode(certPEMBlock)    if certDERBlock == nil {        return nil    }    //附加数字证书到返回    cert.Certificate = append(cert.Certificate,certDERBlock.Bytes)    //继续解析Certifacate Chan,这里要明白证书链的概念    certDERBlockChain,_ := pem.Decode(restPEMBlock)    if certDERBlockChain != nil {        //追加证书链证书到返回        cert.Certificate = append(cert.Certificate,certDERBlockChain.Bytes)        fmt.Println("存在证书链")    }    //读取RSA私钥进文件到字节数组    keyPEMBlock,err := IoUtil.Readfile(privateKey)    if err != nil {        return nil    }    //解码pem格式的私钥------BEGIN RSA PRIVATE KEY----- -----END RSA PRIVATE KEY-----    keyDERBlock,_ := pem.Decode(keyPEMBlock)    if keyDERBlock == nil {        return nil    }    //打印出私钥类型    fmt.Println(keyDERBlock.Type)    fmt.Println(keyDERBlock.headers)    var key interface{}    var errParsePK error    if keyDERBlock.Type == "RSA PRIVATE KEY" {        //RSA PKCS1        key,errParsePK = x509.ParsePKCS1PrivateKey(keyDERBlock.Bytes)    } else if keyDERBlock.Type == "PRIVATE KEY" {        //pkcs8格式的私钥解析        key,errParsePK = x509.ParsePKCS8PrivateKey(keyDERBlock.Bytes)    }    if errParsePK != nil {        return nil    } else {        cert.PrivateKey = key    }    //第一个叶子证书就是我们https中使用的证书    x509Cert,err := x509.ParseCertificate(certDERBlock.Bytes)    if err != nil {        fmt.Println("x509证书解析失败")        return nil    } else {        switch x509Cert.PublicKeyAlgorithm {        case x509.RSA:            {                fmt.Println("Plublic Key Algorithm:RSA")            }        case x509.DSA:            {                fmt.Println("Plublic Key Algorithm:DSA")            }        case x509.ECDSA:            {                fmt.Println("Plublic Key Algorithm:ECDSA")            }        case x509.UnkNownPublicKeyAlgorithm:            {                fmt.Println("Plublic Key Algorithm:UnkNow")            }        }    }    return &cert}func main() {    fmt.Println("---------pkcs8 private key ---------------")    parseCert("./server.crt","pkcs8_server.key")    fmt.Println("---------pkcs1 private key ---------------")    parseCert("./server.crt","server.key")}

附上代码下载地址: 代码下载
最近在写基于golang的https和https反向代理服务,ActivedRouter,大家可以去github 帮我start一下谢谢,万分感谢。

总结

以上是内存溢出为你收集整理的golang解析数字证书全部内容,希望文章能够帮你解决golang解析数字证书所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1277947.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存