p12-info
Version:
Parse P12 (PKCS #12) certificates
37 lines • 1.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.readRaw = void 0;
const forge = require("node-forge");
const readRaw = (cert, pass) => {
const p12Asn1 = forge.asn1.fromDer(cert.toString('binary'));
const p12 = forge.pkcs12.pkcs12FromAsn1(p12Asn1, false, pass);
const data = p12.getBags({ bagType: forge.pki.oids.certBag });
if (!data || !data?.[forge.pki.oids.certBag]?.[0])
throw new Error('Unable to parse certificate. Incorrect Password?');
// @ts-ignore
return data[forge.pki.oids.certBag][0];
};
exports.readRaw = readRaw;
function p12info(cert, pass) {
const data = (0, exports.readRaw)(cert, pass);
return {
friendlyName: data.attributes.friendlyName[0],
subject: data.cert.subject?.attributes.reduce((a, r) => {
r.name && (a[r.name] = Buffer.from(r.value, 'latin1').toString());
return a;
}, {}),
issuer: data.cert.issuer?.attributes.reduce((a, r) => {
r.name && (a[r.name] = Buffer.from(r.value, 'latin1').toString());
return a;
}, {}),
serialNumber: data.cert.serialNumber,
version: data.cert.version,
validity: data.cert.validity,
isValid: data.cert.validity.notBefore <= new Date() && data.cert.validity.notAfter >= new Date(),
altNames: data.cert.extensions
.find((r) => r.name = 'subjectAltName')
?.altNames?.map((r) => r.value)
};
}
exports.default = p12info;
//# sourceMappingURL=index.js.map