So laden Sie eine PKCS#12 Digitale Zertifikat mit Javascript-WebCrypto-API
Ich versuche zum signieren der Daten mit Hilfe der WebCrypto API, aber statt der Schaffung einer private - /public-key und dem Export in pkcs#1 oder 8, ich würde wirklich gerne eines Benutzers zu verwenden PKCS#12 zum signieren der Daten. Ich habe gelesen, die W3C-spec, aber nicht viel davon und kann nicht finden, eine gute material auf, wie dies zu tun. Jetzt möchte ich zu verlassen, ActiveX und Java-Applets zur Seite. Gibt es eine Möglichkeit zu zwicken die folgenden:
var buffer = encode(prompt("Please enter your password"));
//TODO:
//implement a prompt for a pfx or cert
return crypto.subtle.importKey("raw", buffer, "PBKDF2", false, usages);
//TODO:
//instead of importing it, ask for the certificate's pass to sign data
//with crypto.subtle.sign
Irgendwelche Hinweise?
UPDATE
Hier ist der code, mit dem ich gearbeitet habe
<script src="forge.min.js"></script>
<script>
var errorsReportedByVerifier;
errorsReportedByVerifier = checkStorage() && checkBrowserAPIs();
if (!errorsReportedByVerifier){
console.log("adding click event");
document.getElementById('btnPfx').addEventListener('click', handlePFXFile, false);
storeVariables();
getVariables();
}
function handlePFXFile(evnt) {
console.log("handling pfx")
//alert(document.getElementById('pfx').value);
//error happens in 1st line
//error object does not accept property replace
//forge.min.js Line 1, Column: 17823
var p12Der = forge.util.decode64(document.getElementById('pfx').valueOf());
//var pkcs12Asn1 = forge.asn1.fromDer(p12Der);
//var pkcs12 = forge.pkcs12.pkcs12FromAsn1(pkcs12Asn1, false, 'pss');
console.log("pkcs12");
}
</script>
- Im moment WebCrypto ist noch nicht bereit für solche Dinge.
- Mayevski 'EldoS Corp, ok, pkcs8 es ist, thx
Du musst angemeldet sein, um einen Kommentar abzugeben.
Web-cryptography-api nicht unterstützt PKCS # 12. Sie können eine Drittanbieter-Bibliothek zum Dekodieren der p12 als Schmiede https://github.com/digitalbazaar/forge#pkcs12 und laden privateKey in webcrypto
Lesen Sie die PKCS#12-Zertifikat
PKCS#12 gespeichert ist, in DER, so Lesen Sie zuerst aus einer Datei oder verwenden Sie eine zuvor gespeicherte base64
Decode PKCS#12 mit forge und extrahieren Sie den privaten Schlüssel
Dekodieren dann DER format ASN1, und lassen Sie forge liest den Inhalt
Dann bekommen Sie die privaten Schlüssel aus
pkcs12
des gewünschten Zertifikats (siehe Schmieden doc) konvertieren, um PKCS # 8 importiert werden mit webcryptoKonvertieren PKCS#8
Schlüssel importieren in Webcrypto
Und schließlich importieren Sie den Schlüssel in webcrypto
Digitale Signatur
Mit den importierten cryptoKey zurückgegeben, die von der oben beschriebenen Methode können Sie Zeichen mit webcrypto.
Habe ich auch die Codierung von base64, da die Daten-Konvertierungen sind nicht trivial
In pkc12 haben Sie auch die Zertifikatskette wenn Sie brauchen, um zu bauen erweiterte Formate wie AdES
safeBag.type === forge.pki.oids.certBag && safeBag.attributes.localKeyId
) im PEM-format (Base64-codiert). Verwenden Sie die folgenden Schmiede Funktion:forge.pki.certificateToPem(safeBag.cert);
Zum decodieren des cert verwendenforge.pki.certificateFromPem(certificatePem);