伪造 JavaScript 库在 windows 证书存储中导入 p12 文件失败
p12 file import failure in windows certificate store by forge JavaScript library
我正在使用 forge library to create a self signed certificate in .p12 format which generates private-public key pair using WebCryptoAPI。但是当我尝试在 windows 证书存储中导入 .p12 文件时,出现以下错误:
这个link说私钥可能有问题。
以下是我通过 webcryptoApi 生成的密钥片段
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'
因为forge默认使用aes-128加密p12
正如在此 article 中所读,使 PKCS#12 标准化的 RFC7292 并未指定需要支持 AES,但有足够的信息以可互操作的方式使用它。 Windows(甚至 windows10)无法处理使用更安全的加密方案和密码生成的文件。那么,可以使用的最安全的算法就是triple-des
我正在使用 forge library to create a self signed certificate in .p12 format which generates private-public key pair using WebCryptoAPI。但是当我尝试在 windows 证书存储中导入 .p12 文件时,出现以下错误:
这个link说私钥可能有问题。
以下是我通过 webcryptoApi 生成的密钥片段
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'
因为forge默认使用aes-128加密p12
正如在此 article 中所读,使 PKCS#12 标准化的 RFC7292 并未指定需要支持 AES,但有足够的信息以可互操作的方式使用它。 Windows(甚至 windows10)无法处理使用更安全的加密方案和密码生成的文件。那么,可以使用的最安全的算法就是triple-des