Read different certificate/key file formats with JavaScript
Read a PEM X509 certificate / public key
<script src="forge.min.js"></script>(...) var file = 'FILE_DESCRIPTOR_OF_PEM_FILE'; var reader = new FileReader(); reader.readAsText(file); reader.onload = function () { // The cert is ready to be used var cert = forge.pki.certificateFromPem( reader.result ); };
Read a PEM PKCS1 or PKCS8 private key
<script src="forge.min.js"></script>(...) var file = 'FILE_DESCRIPTOR_OF_PEM_FILE'; var reader = new FileReader(); reader.readAsText(file); reader.onload = function () { // The key is ready to be used var privateKey = forge.pki.privateKeyFromPem( reader.result ); };
Read a binary (DER) encoded X509 certificate
<script src="forge.min.js"></script>(...) var file = 'FILE_DESCRIPTOR_OF_X509_BINARY_FILE'; var reader = new FileReader(); reader.readAsArrayBuffer(file); reader.onload = function () { var raw = forge.util.createBuffer( reader.result ); var cert = forge.pki.certificateFromAsn1( forge.asn1.fromDer( raw )); };
Read a binary (DER) encoded private key
<script src="forge.min.js"></script>(...) var file = 'FILE_DESCRIPTOR_OF_X509_BINARY_FILE'; var reader = new FileReader(); reader.readAsArrayBuffer(file); reader.onload = function () { var raw = forge.util.createBuffer( reader.result ); // The key is ready to be used var privateKey = forge.pki.privateKeyFromAsn1( forge.asn1.fromDer( raw ) ); };
Read a PKC12 / PFX file to extract a key / certificate
<script src="forge.min.js"></script>(...) var file = 'FILE_DESCRIPTOR_OF_PFX/PKCS12_BINARY_FILE'; var reader = new FileReader(); reader.readAsArrayBuffer(file); reader.onload = function () { // get p12 as ASN.1 object var p12Asn1 = forge.asn1.fromDer( forge.util.createBuffer( reader.result ) ); // decrypt p12 using the password returned by getPassword(), the password should be protected and not hard coded var p12 = forge.pkcs12.pkcs12FromAsn1(p12Asn1, getPassword() ); // getting the key slot var bags = p12.getBags({friendlyName: 'ALIAS_OF_THE_KEY'}); var keyBag = bags.friendlyName[0]; if ( !keyBag ) { console.log("Key not found"); return; } // the key is ready to be used ! var privateKey = keyBag.key; };