第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Go 中將 x509.Certificate 轉(zhuǎn)換為 tls.Certificate?

如何在 Go 中將 x509.Certificate 轉(zhuǎn)換為 tls.Certificate?

Go
MMTTMM 2021-11-29 15:41:37
我正在使用x/crypto/pkcs12加載 DER 格式的 *.p12 文件。文檔中有一個示例,用于tls.X509KeyPair制作tls.Certificate可用于 HTTP 客戶端的 。這很完美,而且效果很好。但后來我也想驗證證書沒有過期。該pkcs12庫還有一個Decode 函數(shù),它返回一個 x509 證書,我可以使用驗證方法。這也很好用。我對 DER 解碼兩次對我來說似乎很奇怪。一次用于x509.Certificate驗證,再次獲得tls.Certificate. 我不知道這兩個證書結(jié)構(gòu)之間的關(guān)系,但看到 tls 包有一個名為 tls.X509KeyPair 的函數(shù),它需要一些字節(jié),不應(yīng)該有一種明顯的方法從 x509 獲取 tls.Certificate 。證書還是簽證?我錯過了什么?
查看完整描述

2 回答

?
慕容3067478

TA貢獻1773條經(jīng)驗 獲得超3個贊

tls.Certificate 通常存儲證書- 換句話說,> 1 個證書。請注意,它的Certificate字段是類型[][]byte,其中每個證書都是一個[]byte.

tls 包導(dǎo)入了 x509 包,因此 x509 中沒有獲取 tls.Certificate 的函數(shù);這將導(dǎo)致進口周期。但是如果你有一個 x509.Certificate,你就已經(jīng)有一個 tls.Certificate;只需將 x509.Certificate 的Raw字節(jié)放入 tls.Certificate 的Certificate切片中。


查看完整回答
反對 回復(fù) 2021-11-29
?
蕪湖不蕪

TA貢獻1796條經(jīng)驗 獲得超7個贊

你可以這樣做:


func LoadP12TLSCfg(keystore, password string) (*x509.CertPool, tls.Certificate, error) {

    data, err := ioutil.ReadFile(keystore)

    if err != nil {

        return nil, tls.Certificate{}, err


    }

    pk, crt, caCrts, err := pkcs12.DecodeChain(data, password)

    if err != nil {

        return nil, tls.Certificate{}, err

    }

    pool := x509.NewCertPool()

    pool.AddCert(caCrts[0])

    tlsCrt := tls.Certificate{

        Certificate: [][]byte{crt.Raw},

        Leaf:        crt,

        PrivateKey:  pk,

    }

    return pool, tlsCrt, nil

}


func LoadServerTLSCfg(keystore, password string) (*tls.Config, error) {

    pool, crt, err := LoadP12TLSCfg(keystore, password)

    if err != nil {

        return nil, err

    }

    cfg := &tls.Config{

        ClientCAs:    pool,

        ClientAuth:   tls.RequireAndVerifyClientCert,

        Certificates: []tls.Certificate{crt},

    }

    return cfg, nil

}


func LoadClientTLSCfg(keystore, password string, serverName string) (*tls.Config, error) {

    pool, crt, err := LoadP12TLSCfg(keystore, password)

    if err != nil {

        return nil, err

    }

    cfg := &tls.Config{

        RootCAs:      pool,

        Certificates: []tls.Certificate{crt},

        ServerName:   serverName,

    }

    return cfg, nil

}


查看完整回答
反對 回復(fù) 2021-11-29
  • 2 回答
  • 0 關(guān)注
  • 283 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號