我在用
第一个月
在localhost上,它工作正常。但当我把代码放在服务器上时,它给出错误无法读取未定义的属性importKey。据我所知,我没有在安全的https连接中使用它。因此,它显示错误。我检查了这个问题crypto. screb在Chrome中的不安全来源如何启用crypto. screb在Chrome中的不安全来源?
是否有任何替代方案来解决此问题?
下面是代码
var contents = e.target.result;//Data from the PKCS#12 file input
var pkcs12Der = arrayBufferToString(contents)
var pkcs12B64 = forge.util.encode64(pkcs12Der);
var pkcs12Der = forge.util.decode64(pkcs12B64);
var pkcs12Asn1 = forge.asn1.fromDer(pkcs12Der);
var pkcs12 = forge.pkcs12.pkcs12FromAsn1(pkcs12Asn1, false, password);
var privateKey
for (var sci = 0; sci < pkcs12.safeContents.length; ++sci) {
var safeContents = pkcs12.safeContents[sci];
for (var sbi = 0; sbi < safeContents.safeBags.length; ++sbi) {
var safeBag = safeContents.safeBags[sbi];
if (safeBag.type === forge.pki.oids.keyBag) {
privateKey = safeBag.key;
} else if (safeBag.type === forge.pki.oids.pkcs8ShroudedKeyBag) {
privateKey = safeBag.key;
} else if (safeBag.type === forge.pki.oids.certBag) { }
}
}
var privateKeyInfoDerBuff = _privateKeyToPkcs8(privateKey);
//Import the webcrypto key
window.crypto.subtle.importKey('pkcs8', privateKeyInfoDerBuff,
{ name: "RSASSA-PKCS1-v1_5", hash: { name: "SHA-256" } }, true, ["sign"])
.then(function (cryptoKey) {
var digestToSignBuf = stringToArrayBuffer(message);
crypto.subtle.sign({ name: "RSASSA-PKCS1-v1_5" }, cryptoKey, digestToSignBuf)
.then(function (signature) {
// Other code will come here
});
})
2条答案
按热度按时间mrphzbgm1#
我试过了,找到了解决方案。你可以简单地使用私钥。下面是:
ac1kyiln2#
错误含义:使用http
S
而不是普通的HTTP或IP地址。你的代码在本地主机中可以正常工作,但是对于生产,使用带有SSH证书的域名。例如,带有
HTTPS
的域。对于仅使用IP而不是正确域名进行的测试,请使IP地址经过SSH认证(HTTPS)。参考:Is it possible to have SSL certificate for IP address, not domain name?