douzhang7603 2019-01-14 12:05
浏览 194

具有中间证书的Golang PKCS12标志

I have .p12 extension which contains certificate and passkey. Then I extract cert and key in PEM using these commands:

openssl pkcs12 -in <filename>.p12 -clcerts -nokeys -out passcertificate.pem -passin pass:<password>

openssl pkcs12 -in Certificates.p12 -nocerts -out passkey.pem -passin pass:<password> -passout pass:<password_out>

After all I sign file with private key and intermediate cert to get signature.

openssl smime -binary -sign -certfile <intermediate>.pem -signer passcertificate.pem -inkey passkey.pem -in manifest.json -out signature -outform DER -passin pass:<password_out>

Is this possible to reproduce these steps in Go using standard library?

// read file content to be signed
content, err := ioutil.ReadFile(".../path_to_file/manifest.json")
if err != nil {
    //
}
// read .p12 file
buf, err := ioutil.ReadFile(".../path_to_file/Certificate.p12")
if err != nil {
    //
}
// extract key and cert
pk, cert, err := pkcs12.Decode(buf, password)
if err != nil {
    return err
}
privateKey := pk.(*rsa.PrivateKey)
// create hash
h := crypto.SHA256.New()
_, err = h.Write(content)
if err != nil {
    //
}
hashed := h.Sum(nil)
// how to pass intermediate cert??
sign, err := rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA256, 
hashed)
if err != nil {
    return err
}
sig := base64.RawURLEncoding.EncodeToString(sign)
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 mmocr的训练错误,结果全为0
    • ¥15 python的qt5界面
    • ¥15 无线电能传输系统MATLAB仿真问题
    • ¥50 如何用脚本实现输入法的热键设置
    • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
    • ¥30 深度学习,前后端连接
    • ¥15 孟德尔随机化结果不一致
    • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
    • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
    • ¥15 谁有desed数据集呀