使用JavaScript解码PKCS12文件并从中获得加密私钥的最佳方法
Best approch to decode the PKCS12 file and get the encrypted private key from it using JavaScript
请建议使用JavaScript解码PKCS12文件并从中获得加密私钥的任何想法。我知道这可以很容易地完成使用Java Keytool命令和Java安全包。但我希望它是由Java脚本完成。以下是我的实际要求。
我有一个"。"P12"扩展文件,是pkcs12的其中一种格式。首先应该对其进行解码,并且需要跟踪已解码的文件,即加密私钥的确切位置。需要得到加密的私钥并解密并将其发送给接收者。所有这些只能在JAVASCRIPT中完成。
我想这可能是你正在寻找的:
" JavaScript中TLS(和其他各种加密工具)的本地实现。"
https://github.com/digitalbazaar/forge pkcs12
这个例子听起来很接近:
// decode p12 from base64
var p12Der = forge.util.decode64(p12b64);
// get p12 as ASN.1 object
var p12Asn1 = forge.asn1.fromDer(p12Der);
// decrypt p12
var p12 = forge.pkcs12.pkcs12FromAsn1(p12Asn1, 'password');
// look at pkcs12.safeContents
// generate p12, base64 encode
var p12Asn1 = forge.pkcs12.toPkcs12Asn1(
privateKey, certificateChain, 'password');
var p12Der = forge.asn1.ToDer(p12Asn1).getBytes();
var p12b64 = forge.util.encode64(p12Der);
Rgds…Hoonto/马特
这将工作完美
// get p12 as ASN.1 object
var p12Asn1 = forge.asn1.fromDer(buffer);
// decrypt p12 using the password 'password'
var p12 = forge.pkcs12.pkcs12FromAsn1(p12Asn1, password);
// get bags by type
var certBags = p12.getBags({bagType: forge.pki.oids.certBag});
var pkeyBags = p12.getBags({bagType: forge.pki.oids.pkcs8ShroudedKeyBag});
// fetching certBag
var certBag = certBags[forge.pki.oids.certBag][0];
// fetching keyBag
var keybag = pkeyBags[forge.pki.oids.pkcs8ShroudedKeyBag][0];
// generate pem from private key
var privateKeyPem = forge.pki.privateKeyToPem(keybag.key);
// generate pem from cert
var certificate = forge.pki.certificateToPem(certBag.cert);
多亏了@Ujjawal和@hoonto的例子,我才能够很好地完成下面的工作。
const decodePKCS12 = (
file // Dom File object
) => {
return new Promise((resolve, reject) => {
const reader = new FileReader()
reader.onload = evt => {
try {
const binary = evt && evt.target ? evt.target.result : null
if (!binary) {
reject(new Error('No file data'))
}
const p12Asn1 = asn1.fromDer(binary)
const p12 = pkcs12.pkcs12FromAsn1(p12Asn1)
const certBags = p12.getBags({bagType: pki.oids.certBag})
const pkeyBags = p12.getBags({bagType: pki.oids.pkcs8ShroudedKeyBag})
const certBag = certBags[pki.oids.certBag][0]
const keybag = pkeyBags[pki.oids.pkcs8ShroudedKeyBag][0]
const certificate = pki.certificateToPem(certBag.cert)
const privateKey = pki.privateKeyToPem(keybag.key)
resolve({certificate, privateKey})
} catch (e) {
reject(e)
}
}
reader.onerror = reject
reader.readAsBinaryString(file)
})
}
相关文章:
- 如何在Node.JS中加载加密私钥
- 如何在网络密码API中使用私钥对数据进行加密
- 维护https和http之间的私钥
- 来自模数和JavaScript中的私有指数的RSA私钥
- Javascript Forge Crypto Library:重新创建公钥和私钥以供以后重用
- 格式无效 pki.私钥发件人..PKCS#8 with node-forge javascript.
- 在Javascript中生成PGP密钥对,并使用加密的PGP私钥对文本进行签名
- JSBN/Forge是否可以用于生成RSA私钥/公钥对
- 如何对 Apache 服务器进行签名,以便来自目录的所有请求都通过 HTTPS 并包含您的私钥
- 从 N E D BIG INTS 生成序列化的 RSA 公钥/私钥
- 如何在客户端的浏览器中存储 RSA 私钥以获得更好的用户体验
- 确保HTTP API的安全-无用户密码提示,避免暴露私钥
- GetStream.io:共享私钥时出错
- 难以掌握如何使用私钥安全地签署JWT
- 使用JavaScript解码PKCS12文件并从中获得加密私钥的最佳方法
- 如何使用来自浏览器的证书私钥对文档进行签名(CAPICOM替代方案)
- 是否有方法以编程方式确定私钥是用DER还是PEM编码的?
- 从公共网站上传文件到个人Dropbox而不暴露私钥
- 无法在Node.js中使用ECDH私钥签署缓冲区
- 如何在不发送私钥的情况下获得SQS新消息