ssl-information
Advanced tools
+1
-1
| { | ||
| "name": "ssl-information", | ||
| "version": "1.0.1", | ||
| "version": "1.0.2", | ||
| "description": "Get SSL certificate information", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
+28
-4
| # SSL-INFORMATION | ||
| [](https://github.com/AndresMorelos/ssl-info/blob/master/LICENSE) | ||
| [](https://github.com/AndresMorelos/ssl-info/blob/master/LICENSE) | ||
| [](https://github.com/AndresMorelos/ssl-info/stargazers) | ||
| [](https://www.npmjs.com/package/ssl-info) | ||
| [](https://www.npmjs.com/package/ssl-information) | ||
| [](https://www.npmjs.com/package/ssl-information) | ||
@@ -12,3 +12,3 @@ | ||
| ```js | ||
| npm i ssl-info | ||
| npm i ssl-information | ||
| ``` | ||
@@ -21,3 +21,3 @@ | ||
| certManager | ||
| } = require('ssl-info') | ||
| } = require('ssl-information') | ||
@@ -40,1 +40,25 @@ certManager | ||
| | path | false | undefined | | ||
| ### Certificate Object | ||
| ```js | ||
| { | ||
| subject: Object; | ||
| issuer: Object; | ||
| subjectaltname: string; | ||
| infoAccess: Array<String>; | ||
| modulus: string; | ||
| exponent: string; | ||
| valid_from: string; | ||
| valid_to: string; | ||
| fingerprint: string; | ||
| fingerprint256: string; | ||
| ext_key_usage: Array<String>; | ||
| serialNumber: string; | ||
| raw: Buffer; | ||
| isValid: boolean; | ||
| content: string; // Parse raw content | ||
| } | ||
| ``` |
| { | ||
| "extends": [ | ||
| "airbnb", | ||
| "prettier" | ||
| ], | ||
| "plugins": [ | ||
| "prettier" | ||
| ], | ||
| "rules": { | ||
| "prettier/prettier": [ | ||
| "error" | ||
| ] | ||
| } | ||
| } |
| { | ||
| "printWidth": 100, | ||
| "singleQuote": true | ||
| } |
| import { Certificate, PeerCertificate } from "tls"; | ||
| export class Cert implements PeerCertificate { | ||
| subject: Certificate; | ||
| issuer: Certificate; | ||
| subjectaltname: string; | ||
| infoAccess: NodeJS.Dict<string[]>; | ||
| modulus: string; | ||
| exponent: string; | ||
| valid_from: string; | ||
| valid_to: string; | ||
| fingerprint: string; | ||
| fingerprint256: string; | ||
| ext_key_usage: string[]; | ||
| serialNumber: string; | ||
| raw: Buffer; | ||
| isValid?: boolean; | ||
| content?: string; | ||
| constructor({ subject, issuer, subjectaltname, infoAccess, modulus, exponent, valid_from, valid_to, fingerprint, fingerprint256, ext_key_usage, serialNumber, raw }: { subject: any; issuer: any; subjectaltname: any; infoAccess: any; modulus: any; exponent: any; valid_from: any; valid_to: any; fingerprint: any; fingerprint256: any; ext_key_usage: any; serialNumber: any; raw: any; }) { | ||
| this.subject = subject; | ||
| this.issuer = issuer; | ||
| this.subjectaltname = subjectaltname; | ||
| this.infoAccess = infoAccess; | ||
| this.modulus = modulus; | ||
| this.exponent = exponent; | ||
| this.valid_from = valid_from; | ||
| this.valid_to = valid_to; | ||
| this.fingerprint = fingerprint; | ||
| this.fingerprint256 = fingerprint256; | ||
| this.ext_key_usage = ext_key_usage; | ||
| this.serialNumber = serialNumber; | ||
| this.raw = raw; | ||
| this.isValid = this.setIsValid(); | ||
| this.content = this.getFileContent(); | ||
| } | ||
| private getFileContent(): string { | ||
| return this.raw.toString('base64') | ||
| } | ||
| private setIsValid(): boolean { | ||
| const today = new Date(); | ||
| const validFrom = new Date(this.valid_from); | ||
| const validTo = new Date(this.valid_to) | ||
| if ((validTo < today) || (today < validFrom)) { | ||
| return false; | ||
| } | ||
| return true; | ||
| } | ||
| } |
| import { OptionsType, RequestOptions } from '../utils'; | ||
| import { Cert } from './Certificate'; | ||
| import { Request } from './Request' | ||
| export class Manager { | ||
| private request: Request | ||
| constructor() { | ||
| this.request = new Request(); | ||
| } | ||
| public get(options: OptionsType) { | ||
| const _options = this.getOptions(options) | ||
| return new Promise((resolve, reject) => { | ||
| this.request.getCertificate(_options, (certificate: Cert, error: Error) => { | ||
| if (error) { | ||
| reject(error) | ||
| } | ||
| resolve(certificate) | ||
| }) | ||
| }) | ||
| } | ||
| private getOptions(options: OptionsType): RequestOptions { | ||
| return { | ||
| host: options.host, | ||
| port: options.port ? options.port : 443, | ||
| method: options.method ? options.method : 'GET', | ||
| path: options.path | ||
| } | ||
| } | ||
| } |
| import https from 'https' | ||
| import { TLSSocket } from 'tls' | ||
| import { RequestOptions } from '../utils' | ||
| import { Cert } from './Certificate' | ||
| export class Request { | ||
| getCertificate(options: RequestOptions, callback: Function) { | ||
| https.request(options, (res) => { | ||
| const certificate = ((res.socket) as TLSSocket).getPeerCertificate(); | ||
| if (this.isEmpty(certificate) || certificate === null || certificate === undefined) { | ||
| throw new Error(`The site did not provide a certificate`) | ||
| } | ||
| callback(new Cert(certificate)); | ||
| }).end() | ||
| } | ||
| private isEmpty(certificate: Object): boolean { | ||
| return Object.keys(certificate).length === 0 && certificate.constructor === Object | ||
| } | ||
| } |
| import { Manager } from './classes/Manager' | ||
| export const certManager = new Manager() | ||
| import { type } from "os" | ||
| export type RequestOptions = { | ||
| host: string, | ||
| port: number, | ||
| path?: string, | ||
| method: string | ||
| } | ||
| export type OptionsType = { | ||
| host: string, | ||
| port?: number, | ||
| path?: string, | ||
| method?: string | ||
| } |
| { | ||
| "compilerOptions": { | ||
| /* Visit https://aka.ms/tsconfig.json to read more about this file */ | ||
| /* Basic Options */ | ||
| // "incremental": true, /* Enable incremental compilation */ | ||
| "target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ | ||
| "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ | ||
| "lib": ["es2017", "es7", "es6", "dom"], /* Specify library files to be included in the compilation. */ | ||
| // "allowJs": true, /* Allow javascript files to be compiled. */ | ||
| // "checkJs": true, /* Report errors in .js files. */ | ||
| // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ | ||
| "declaration": true, /* Generates corresponding '.d.ts' file. */ | ||
| // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ | ||
| // "sourceMap": true, /* Generates corresponding '.map' file. */ | ||
| // "outFile": "./", /* Concatenate and emit output to single file. */ | ||
| "outDir": "./dist", /* Redirect output structure to the directory. */ | ||
| "rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ | ||
| // "composite": true, /* Enable project compilation */ | ||
| // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ | ||
| "removeComments": true, /* Do not emit comments to output. */ | ||
| // "noEmit": true, /* Do not emit outputs. */ | ||
| // "importHelpers": true, /* Import emit helpers from 'tslib'. */ | ||
| // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ | ||
| // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ | ||
| /* Strict Type-Checking Options */ | ||
| "strict": true, /* Enable all strict type-checking options. */ | ||
| // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ | ||
| // "strictNullChecks": true, /* Enable strict null checks. */ | ||
| // "strictFunctionTypes": true, /* Enable strict checking of function types. */ | ||
| // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ | ||
| // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ | ||
| // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ | ||
| // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ | ||
| /* Additional Checks */ | ||
| // "noUnusedLocals": true, /* Report errors on unused locals. */ | ||
| // "noUnusedParameters": true, /* Report errors on unused parameters. */ | ||
| // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ | ||
| // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ | ||
| /* Module Resolution Options */ | ||
| // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ | ||
| // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ | ||
| // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ | ||
| // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ | ||
| // "typeRoots": [], /* List of folders to include type definitions from. */ | ||
| // "types": [], /* Type declaration files to be included in compilation. */ | ||
| // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ | ||
| "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ | ||
| // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ | ||
| // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ | ||
| /* Source Map Options */ | ||
| // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ | ||
| // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ | ||
| // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ | ||
| // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ | ||
| /* Experimental Options */ | ||
| // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ | ||
| // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ | ||
| /* Advanced Options */ | ||
| "skipLibCheck": true, /* Skip type checking of declaration files. */ | ||
| "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ | ||
| } | ||
| } |
Network access
Supply chain riskThis module accesses the network.
Found 2 instances in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 2 instances in 1 package
61
60.53%2
-60%8891
-52.12%13
-38.1%156
-53.43%