Read different certificate/key file formats with Angular 2
Read a X509 certificate / public key, PKC1 private key or PKCS8 private key encoded with PEM
let reader = new FileReader(); let file = 'FILE_DESCRIPTOR_OF_PEM_FILE'; reader.readAsText(file); reader.onload = function () { let jose = require('node-jose'); let privateKey = reader.result; jose.JWK.asKey(privateKey, "pem").then(function(key) { // the key is ready to be used ! console.log( key ); }, function(error) { console.log(error); }); };
Read a X509 binary encoded certificate / public key
let reader = new FileReader(); let file = 'FILE_DESCRIPTOR_OF_X509_BINARY_FILE'; reader.readAsArrayBuffer(file); reader.onload = function () { let jose = require('node-jose'); let privateKey = jose.util.asBuffer(reader.result); jose.JWK.asKey(privateKey, "x509").then(function(key) { // the key is ready to be used ! console.log( key ); }, function(error) { console.log(error); }); };
Read a binary encoded (DER) private key
let reader = new FileReader(); let file = 'FILE_DESCRIPTOR_OF_PRIVATE_KEY_BINARY_FILE'; reader.readAsArrayBuffer(file); reader.onload = function () { let jose = require('node-jose'); let privateKey = jose.util.asBuffer(reader.result); jose.JWK.asKey(privateKey, "private").then(function(key) { // the key is ready to be used ! console.log( key ); }, function(error) { console.log(error); }); };
Read a PKC12 / PFX file to extract a key / certificate
let reader = new FileReader(); let file = 'FILE_DESCRIPTOR_OF_PFX/PKCS12_BINARY_FILE'; reader.readAsArrayBuffer(file); reader.onload = function () { let jose = require('node-jose'); let forge = require('node-forge'); let privateKey = reader.result; // get p12 as ASN.1 object let p12Asn1 = forge.asn1.fromDer( forge.util.createBuffer( privateKey ) ); // decrypt p12 using the password returned by getPassword(), the password should be protected and not hard coded let p12 = forge.pkcs12.pkcs12FromAsn1(p12Asn1, getPassword() ); // getting the key slot let bags = p12.getBags({friendlyName: '1'}); let keyBag = bags.friendlyName[0]; if ( !keyBag ) { console.log("Key not found"); return; } // transform to PEM to be compatible with node-jose var pem = forge.pki.privateKeyToPem(keyBag.key); jose.JWK.asKey(pem, "pem").then(function(key) { // the key is ready to be used ! console.log( key ); }, function(error) { console.log(error); }); };