move cert-info.js to own module certpem
This commit is contained in:
parent
3efd2766fe
commit
b217b33fff
100
lib/cert-info.js
100
lib/cert-info.js
|
@ -1,100 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var certInfo = module.exports;
|
|
||||||
|
|
||||||
// this is really memory expensive to do
|
|
||||||
// (about half of a megabyte of loaded code)
|
|
||||||
certInfo._pemToBinAb = function (pem) {
|
|
||||||
var b64 = pem.replace(/(-----(BEGIN|END) CERTIFICATE-----|[\n\r])/g, '');
|
|
||||||
var buf = Buffer(b64, 'base64');
|
|
||||||
var ab = new Uint8Array(buf).buffer; // WORKS
|
|
||||||
//var ab = buf.buffer // Doesn't work
|
|
||||||
|
|
||||||
return ab;
|
|
||||||
};
|
|
||||||
certInfo.getCertInfo = function (pem) {
|
|
||||||
var ab = module.exports._pemToBinAb(pem);
|
|
||||||
var merge = require("node.extend");
|
|
||||||
|
|
||||||
var common = require("asn1js/org/pkijs/common");
|
|
||||||
var _asn1js = require("asn1js");
|
|
||||||
var _pkijs = require("pkijs");
|
|
||||||
var _x509schema = require("pkijs/org/pkijs/x509_schema");
|
|
||||||
|
|
||||||
// #region Merging function/object declarations for ASN1js and PKIjs
|
|
||||||
var asn1js = merge(true, _asn1js, common);
|
|
||||||
|
|
||||||
var x509schema = merge(true, _x509schema, asn1js);
|
|
||||||
|
|
||||||
var pkijs_1 = merge(true, _pkijs, asn1js);
|
|
||||||
var pkijs = merge(true, pkijs_1, x509schema);
|
|
||||||
|
|
||||||
var asn1 = pkijs.org.pkijs.fromBER(ab);
|
|
||||||
var certSimpl = new pkijs.org.pkijs.simpl.CERT({ schema: asn1.result });
|
|
||||||
|
|
||||||
return certSimpl;
|
|
||||||
};
|
|
||||||
|
|
||||||
certInfo.getBasicInfo = function (pem) {
|
|
||||||
var c = certInfo.getCertInfo(pem);
|
|
||||||
var domains = [];
|
|
||||||
var sub;
|
|
||||||
|
|
||||||
c.extensions.forEach(function (ext) {
|
|
||||||
if (ext.parsedValue && ext.parsedValue.altNames) {
|
|
||||||
ext.parsedValue.altNames.forEach(function (alt) {
|
|
||||||
domains.push(alt.Name);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
sub = c.subject.types_and_values[0].value.value_block.value || null;
|
|
||||||
|
|
||||||
return {
|
|
||||||
subject: sub
|
|
||||||
, altnames: domains
|
|
||||||
// for debugging during console.log
|
|
||||||
// do not expect these values to be here
|
|
||||||
, _issuedAt: c.notBefore.value
|
|
||||||
, _expiresAt: c.notAfter.value
|
|
||||||
, issuedAt: new Date(c.notBefore.value).valueOf()
|
|
||||||
, expiresAt: new Date(c.notAfter.value).valueOf()
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
certInfo.getCertInfoFromFile = function (pemFile) {
|
|
||||||
return require('fs').readFileSync(pemFile, 'ascii');
|
|
||||||
};
|
|
||||||
|
|
||||||
certInfo.testGetCertInfo = function (pathname) {
|
|
||||||
var path = require('path');
|
|
||||||
var pemFile = pathname || path.join(__dirname, '..', 'tests', 'example.cert.pem');
|
|
||||||
return certInfo.getCertInfo(certInfo.getCertInfoFromFile(pemFile));
|
|
||||||
};
|
|
||||||
|
|
||||||
certInfo.testBasicCertInfo = function (pathname) {
|
|
||||||
var path = require('path');
|
|
||||||
var pemFile = pathname || path.join(__dirname, '..', 'tests', 'example.cert.pem');
|
|
||||||
return certInfo.getBasicInfo(certInfo.getCertInfoFromFile(pemFile));
|
|
||||||
};
|
|
||||||
|
|
||||||
if (require.main === module) {
|
|
||||||
var c = certInfo.testGetCertInfo(process.argv[2]);
|
|
||||||
|
|
||||||
console.info('');
|
|
||||||
|
|
||||||
console.info(c.notBefore.value);
|
|
||||||
console.info(new Date(c.notBefore.value).valueOf());
|
|
||||||
|
|
||||||
console.info('');
|
|
||||||
|
|
||||||
console.info(c.notAfter.value);
|
|
||||||
console.info(new Date(c.notAfter.value).valueOf());
|
|
||||||
|
|
||||||
console.info('');
|
|
||||||
|
|
||||||
var b = certInfo.testBasicCertInfo(process.argv[2]);
|
|
||||||
console.info('');
|
|
||||||
console.info(JSON.stringify(b, null, ' '));
|
|
||||||
console.info('');
|
|
||||||
}
|
|
|
@ -8,8 +8,8 @@ var PromiseA = require('bluebird');
|
||||||
var dns = PromiseA.promisifyAll(require('dns'));
|
var dns = PromiseA.promisifyAll(require('dns'));
|
||||||
|
|
||||||
module.exports.attachCertInfo = function (results) {
|
module.exports.attachCertInfo = function (results) {
|
||||||
var getCertInfo = require('./cert-info').getBasicInfo;
|
|
||||||
// XXX Note: Parsing the certificate info comes at a great cost (~500kb)
|
// XXX Note: Parsing the certificate info comes at a great cost (~500kb)
|
||||||
|
var getCertInfo = require('certpem').info;
|
||||||
var certInfo = getCertInfo(results.cert);
|
var certInfo = getCertInfo(results.cert);
|
||||||
|
|
||||||
// subject, altnames, issuedAt, expiresAt
|
// subject, altnames, issuedAt, expiresAt
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"asn1js": "^1.2.12",
|
"asn1js": "^1.2.12",
|
||||||
"bluebird": "^3.0.6",
|
"bluebird": "^3.0.6",
|
||||||
|
"certpem": "^1.0.0",
|
||||||
"homedir": "^0.6.0",
|
"homedir": "^0.6.0",
|
||||||
"le-acme-core": "^2.0.5",
|
"le-acme-core": "^2.0.5",
|
||||||
"le-challenge-fs": "^2.0.2",
|
"le-challenge-fs": "^2.0.2",
|
||||||
|
|
Loading…
Reference in New Issue