没有 ssl,无法读取未定义的 Web Crypto API 的属性“importKey”

问题描述

我正在使用

window.crypto.subtle.importKey

在本地主机上,它工作正常。但是当我将代码放在服务器上时,它给出了错误无法读取未定义的属性 importKey。据我所知,我没有在安全的 https 连接中使用它。因此它显示错误。我检查了这个问题 crypto.subtle 在 Chrome 中的不安全来源 How to enable crypto.subtle for unsecure origins in 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
                    });
            })

解决方法

我尝试并得到了解决方案。您可以简单地使用私钥。这是:

DiskUtilC.searchFile("xxx"); 
DiskUtilD.searchFile("xxx");