Simple X509 certificate parser.
From NPM (recommended): npm install x509
Building and testing from source:
sudo npm install -g node-gyp
npm install
npm test
Reading from a file:
constx509=require('x509');varissuer=x509.getIssuer(__dirname+'/certs/your.crt');Reading from a string:
constfs=require('fs'),x509=require('x509');varissuer=x509.getIssuer(fs.readFileSync('./certs/your.crt').toString());Notes:
certmay be a filename or a raw base64 encoded PEM string in any of these methods.
Parse certificate with x509.parseCert and return the alternate names.
constx509=require('x509');varaltNames=x509.getAltNames(__dirname+'/certs/nodejitsu.com.crt');/*altNames = [ '*.nodejitsu.com', 'nodejitsu.com' ]*/Parse certificate with x509.parseCert and return the issuer.
constx509=require('x509');varissuer=x509.getIssuer(__dirname+'/certs/nodejitsu.com.crt');/*issuer = { countryName: 'GB', stateOrProvinceName: 'Greater Manchester', localityName: 'Salford', organizationName: 'COMODO CA Limited', commonName: 'COMODO High-Assurance Secure Server CA' }*/Parse certificate with x509.parseCert and return the subject.
constx509=require('x509');varsubject=x509.getSubject(__dirname+'/certs/nodejitsu.com.crt');/*subject = { countryName: 'US', postalCode: '10010', stateOrProvinceName: 'NY', localityName: 'New York', streetAddress: '902 Broadway, 4th Floor', organizationName: 'Nodejitsu', organizationalUnitName: 'PremiumSSL Wildcard', commonName: '*.nodejitsu.com' }*/Parse subject, issuer, valid before and after date, and alternate names from certificate.
constx509=require('x509');varcert=x509.parseCert(__dirname+'/certs/nodejitsu.com.crt');/*cert = { subject: { countryName: 'US', postalCode: '10010', stateOrProvinceName: 'NY', localityName: 'New York', streetAddress: '902 Broadway, 4th Floor', organizationName: 'Nodejitsu', organizationalUnitName: 'PremiumSSL Wildcard', commonName: '*.nodejitsu.com' }, issuer: { countryName: 'GB', stateOrProvinceName: 'Greater Manchester', localityName: 'Salford', organizationName: 'COMODO CA Limited', commonName: 'COMODO High-Assurance Secure Server CA' }, notBefore: Sun Oct 28 2012 20:00:00 GMT-0400 (EDT), notAfter: Wed Nov 26 2014 18:59:59 GMT-0500 (EST), altNames: [ '*.nodejitsu.com', 'nodejitsu.com' ], signatureAlgorithm: 'sha1WithRSAEncryption', fingerPrint: 'E4:7E:24:8E:86:D2:BE:55:C0:4D:41:A1:C2:0E:06:96:56:B9:8E:EC', publicKey: { algorithm: 'rsaEncryption', e: '65537', n: '.......' }}*/Performs basic certificate validation against a bundle of ca certificates.
It accepts an error-first callback as first argument. If the error is null, then the certificate is valid.
The error messages are the same returned by openssl: x509_verify_cert_error_string
Note: As now, this function only accepts absolute paths to existing files as arguments
constx509=require('x509');x509.verify(__dirname+'/certs/user.com.crt',__dirname+'enduser-example.com.chain',function(err,result){/*...*/});Checking the date to make sure the certificate is active:
constx509=require('x509');varcert=x509.parseCert('yourcert.crt'),date=newDate();if(cert.notBefore>date){// Certificate isn't active yet.}if(cert.notAfter<date){// Certificate has expired.}MIT
If you are suffering from hard to fix build issues, there is an alternative (pure javascript) implementation using emscripten: https://github.com/encharm/x509.js (based on node-x509, slightly different API)