我正在使用forge库创建.p12格式的自签名证书,该证书使用WebCryptoAPI生成私钥-公钥对。但是,当我尝试在Windows证书存储区中导入.p12文件时,出现以下错误:

javascript - Forge JavaScript库在Windows证书存储区中导入p12文件失败-LMLPHP

link表示私钥可能存在问题。

以下是我的webcryptoApi key 生成片段

window.crypto.subtle.generateKey({
    name: 'RSA-PSS',
    modulusLength: 2048,
    publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
    hash: {name: 'SHA-1'}
  }

我的伪造代码段生成p12如下:
var newPkcs12Asn1 = forge.pkcs12.toPkcs12Asn1(
keys.privateKey, [cert], password,
{generateLocalKeyId: true, friendlyName: 'test'},
{algorithm: '3des'});

var newPkcs12Der = forge.asn1.toDer(newPkcs12Asn1).getBytes();
var p12b64 = forge.util.encode64(newPkcs12Der);

var downloadLink = document.createElement("a");
downloadLink.download = "example.p12";
downloadLink.innerHTML = "Download File";
downloadLink.setAttribute('href', 'data:application/x-pkcs12;base64,' + p12b64);
downloadLink.style.display = "none";

downloadLink.click();

笔记 :
  • 我也无法导入Mozilla证书存储中的文件。所以
    p12文件可能有问题?
  • Windows证书存储在导入时正确验证了我的私钥密码,只有完成阶段失败。
  • 最佳答案

    如注释所示,问题是pkcs12编码参数中的语法错误

     {generateLocalKeyId: true, friendlyName: 'test',algorithm: '3des'}
    

    需要设置algorithm: '3des',因为默认情况下伪造使用aes-128加密p12。

    正如在article中可以看到的,代表PKCS#12的RFC7292并未指定需要支持AES,但是有足够的信息可以以可互操作的方式使用它。 Windows(甚至Windows10)无法使用通过更安全的加密方案和密码生成的文件。然后,可以使用的最安全的算法是Triple-des

    关于javascript - Forge JavaScript库在Windows证书存储区中导入p12文件失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43066591/

    10-12 17:21