New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@ghaiklor/x509

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ghaiklor/x509 - npm Package Compare versions

Comparing version

to
1.1.0

33

index.js

@@ -1,3 +0,4 @@

var x509 = require('./build/Release/x509');
var fs = require('fs');
// eslint-disable-next-line node/no-unpublished-require
const x509 = require('./build/Release/x509');
const fs = require('fs');

@@ -13,2 +14,3 @@ exports.version = x509.version;

}
if (!CABundlePath) {

@@ -19,3 +21,2 @@ throw new TypeError('CA Bundle path is required');

fs.stat(certPath, function (certPathErr) {
if (certPathErr) {

@@ -26,3 +27,2 @@ return cb(certPathErr);

fs.stat(CABundlePath, function (bundlePathErr) {
if (bundlePathErr) {

@@ -35,4 +35,3 @@ return cb(bundlePathErr);

cb(null);
}
catch (verificationError) {
} catch (verificationError) {
cb(verificationError);

@@ -44,14 +43,16 @@ }

exports.parseCert = function (path) {
const cert = x509.parseCert(path);
const extensions = {};
exports.parseCert = function (path) {
var ret = x509.parseCert(path);
var exts = {};
for (var key in ret.extensions) {
var newkey = key.replace('X509v3', '').replace(/ /g, '');
newkey = newkey.slice(0, 1).toLowerCase() + newkey.slice(1);
exts[newkey] = ret.extensions[key];
for (const key in cert.extensions) {
let newKey = key.replace('X509v3', '').replace(/ /g, '');
newKey = newKey.slice(0, 1).toLowerCase() + newKey.slice(1);
extensions[newKey] = cert.extensions[key];
}
delete ret.extensions;
ret.extensions = exts;
return ret;
delete cert.extensions;
cert.extensions = extensions;
return cert;
};
{
"name": "@ghaiklor/x509",
"version": "1.0.0",
"description": "Simple X509 certificate parser.",
"version": "1.1.0",
"description": "Simple X509 certificate parser",
"main": "index.js",
"license": "MIT",
"homepage": "https://github.com/ghaiklor/node-x509#readme",
"author": "Colton Baker",
"contributors": [
{
"email": "ghaiklor@gmail.com",
"name": "Eugene Obrezkov",
"email": "ghaiklor@gmail.com",
"url": "https://ghaiklor.com"
}
],
"main": "index.js",
"repository": {

@@ -18,14 +20,40 @@ "type": "git",

},
"bugs": {
"email": "ghaiklor@gmail.com",
"url": "https://github.com/ghaiklor/node-x509/issues"
},
"keywords": [
"x509",
"parser",
"openssl",
"certificate",
"cert"
],
"files": [
"include",
"src",
"binding.gyp",
"index.js"
],
"engines": {
"node": ">=10"
},
"scripts": {
"test": "node test/test"
"lint": "eslint --fix .",
"prepublishOnly": "npm run lint && npm run test",
"test": "jest"
},
"publishConfig": {
"tag": "latest",
"registry": "https://registry.npmjs.org",
"access": "public"
"dependencies": {
"nan": "2.14.1"
},
"license": "MIT",
"dependencies": {
"nan": "2.14.0"
"devDependencies": {
"eslint": "7.6.0",
"eslint-config-standard": "14.1.1",
"eslint-plugin-import": "2.22.0",
"eslint-plugin-jest": "23.20.0",
"eslint-plugin-node": "11.1.0",
"eslint-plugin-promise": "4.2.1",
"eslint-plugin-standard": "4.0.1",
"jest": "26.2.2"
}
}

@@ -1,18 +0,32 @@

node-x509
=========
# node-x509
_Forked from <https://github.com/Southern/node-x509>._
_The reason behind this is that original package does not build on Node.js 12._
[![Build Status](https://travis-ci.com/ghaiklor/node-x509.svg?branch=master)](https://travis-ci.com/ghaiklor/node-x509)
Simple X509 certificate parser.
This fork provides a compatibility with Node.js versions later than 10.
The original library seems like stopped being supported.
- [node-x509](#node-x509)
- [Installation](#installation)
- [Usage](#usage)
- [Methods](#methods)
- [x509.getAltNames(`cert`)](#x509getaltnamescert)
- [x509.getIssuer(`cert`)](#x509getissuercert)
- [x509.getSubject(`cert`)](#x509getsubjectcert)
- [x509.parseCert(`cert`)](#x509parsecertcert)
- [x509.verify(`cert`, `CABundlePath`, function(err, result){ /*...*/})](#x509verifycert-cabundlepath-functionerr-result-)
- [Examples](#examples)
- [License](#license)
## Installation
From NPM *(recommended)*: `npm install @ghaiklor/x509`
From NPM *(recommended)*:
```shell
npm install @ghaiklor/x509
```
Building and testing from source:
```
sudo npm install -g node-gyp
```shell
npm install

@@ -23,128 +37,137 @@ npm test

## Usage
Reading from a file:
```js
const x509 = require('@ghaiklor/x509');
var issuer = x509.getIssuer(__dirname + '/certs/your.crt');
const issuer = x509.getIssuer(__dirname + '/certs/your.crt');
```
Reading from a string:
```js
const fs = require('fs'),
x509 = require('@ghaiklor/x509');
var issuer = x509.getIssuer(fs.readFileSync('./certs/your.crt').toString());
const fs = require('fs');
const x509 = require('@ghaiklor/x509');
const issuer = x509.getIssuer(fs.readFileSync('./certs/your.crt').toString());
```
## Methods
**Notes:**
- `cert` may be a filename or a raw base64 encoded PEM string in any of these methods.
#### x509.getAltNames(`cert`)
### x509.getAltNames(`cert`)
Parse certificate with `x509.parseCert` and return the alternate names.
```js
const x509 = require('x509');
var altNames = x509.getAltNames(__dirname + '/certs/nodejitsu.com.crt');
/*
altNames = [ '*.nodejitsu.com', 'nodejitsu.com' ]
*/
const x509 = require('@ghaiklor/x509');
const altNames = x509.getAltNames(__dirname + '/certs/nodejitsu.com.crt');
// altNames = [ '*.nodejitsu.com', 'nodejitsu.com' ]
```
#### x509.getIssuer(`cert`)
### x509.getIssuer(`cert`)
Parse certificate with `x509.parseCert` and return the issuer.
```js
const x509 = require('x509');
var issuer = 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' }
*/
const x509 = require('@ghaiklor/x509');
const issuer = 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'
// }
```
#### x509.getSubject(`cert`)
### x509.getSubject(`cert`)
Parse certificate with `x509.parseCert` and return the subject.
```js
const x509 = require('x509');
var subject = 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' }
*/
const x509 = require('@ghaiklor/x509');
const subject = 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'
// }
```
#### x509.parseCert(`cert`)
### x509.parseCert(`cert`)
Parse subject, issuer, valid before and after date, and alternate names from certificate.
```js
const x509 = require('x509');
var cert = 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: '.......' } }
*/
const x509 = require('@ghaiklor/x509');
const cert = 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: '.......'
// }
// }
```
### x509.verify(`cert`, `CABundlePath`, function(err, result){ /*...*/})
#### x509.verify(`cert`, `CABundlePath`, function(err, result){ /*...*/})
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.
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](https://www.openssl.org/docs/man1.0.2/crypto/X509_STORE_CTX_get_error.html)
The error messages are the same returned by `openssl`: [x509_verify_cert_error_string](https://www.openssl.org/docs/man1.0.2/crypto/X509_STORE_CTX_get_error.html)
**Note:**
As now, this function only accepts absolute paths to existing files as arguments
As now, this function only accepts absolute paths to existing files as arguments.
```js
const x509 = require('x509');
const x509 = require('@ghaiklor/x509');
x509.verify(
__dirname + '/certs/user.com.crt',
__dirname + 'enduser-example.com.chain',
function(err, result){ /*...*/}
__dirname + 'end-user-example.com.chain',
function(err, result) { /*...*/ }
);
```
## Examples
Checking the date to make sure the certificate is active:
```js
const x509 = require('x509');
var cert = x509.parseCert('yourcert.crt'),
date = new Date();
const x509 = require('@ghaiklor/x509');
const cert = x509.parseCert('your_cert.crt');
const date = new Date();

@@ -154,2 +177,3 @@ if (cert.notBefore > date) {

}
if (cert.notAfter < date) {

@@ -163,4 +187,1 @@ // Certificate has expired.

MIT
#### Alternative implementation / build issues
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)

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet