簡體   English   中英

從 PKCS11 為 Go 中的 mTLS 連接執行私鑰操作的正確方法

[英]Correct way to conduct private key operation from PKCS11 for mTLS connection in Go

我已成功將私鑰導入 PKCS11 令牌。 令牌 object 如下所示:

Private Key Object; RSA 
  label:      #####
  ID:         #####
  Usage:      decrypt, sign, unwrap
  Access:     sensitive
Public Key Object; RSA 2048 bits
  label:      #####
  ID:         #####
  Usage:      encrypt, verify, wrap
  Access:     none

我了解到通常無法提取 CKA_VALUE。 我想知道使用 pkcs#11 私鑰和證書創建 mTLS 連接的正確程序是什么。

我了解到通常無法提取CKA_VALUE

為了以防萬一,請查看ThalesIgnite/crypto11 exportDSAPublicKey() ,它使用公鑰導出pkcs11.Attribute ,包括pcs11.CKA_VALUE
CKA_VALUEECDSA私鑰對象之一)

對於 mTLS,檢查miekg/pkcs11是否有幫助(未測試)。
它至少可以幫助創建基於私鑰和證書的 tlsConfig。

tlsConfig := &tls.Config{
    Certificates: []tls.Certificate{
        {
            PrivateKey: privateKey,
            Cert:       cert,
        },
    },
}

這些應該從您的 pkcs11 文件中提取:

privateKey, err := p.FindObject(session, []*pkcs11.Attribute{
    pkcs11.NewAttribute(pkcs11.CKA_CLASS, pkcs11.CKO_PRIVATE_KEY),
    pkcs11.NewAttribute(pkcs11.CKA_LABEL, "private_key_label"),
})
if err != nil {
    panic(err)
}

cert, err := p.FindObject(session, []*pkcs11.Attribute{
    pkcs11.NewAttribute(pkcs11.CKA_CLASS, pkcs11.CKO_CERTIFICATE),
    pkcs11.NewAttribute(pkcs11.CKA_LABEL, "certificate_label"),
})
if err != nil {
    panic(err)
}

這似乎不需要CKA_VALUE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM