Skip to content

Generate a PKCS#10 CSR from node-native public and private key. Only dependency is crypto module that comes with node.

License

Notifications You must be signed in to change notification settings

meadhbh-hamrick/node-pkcs10

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

node-pkcs10

A Node.js package for generating PKCS#10 Certificate Signing Requests using only the crypto module that comes with node. I was motivated to write this module when I discovered it was difficult to find a node module with similar functionality, but without external dependencies.

You should be able to install it using npm with the command:

npm install node-pkcs10

Then just import it into your JavaScript code with the statement:

const CSR = require( "node-pkcs10" );

You'll need to either read a public / private key pair from somewhere or generate your own. The following snippet reads public and private keys from the filesystem, generates a CSR and then writes it's PEM representation to the filesystem:

const fs = require( "fs" );

const _public_key =
  crypto.createPublicKey(
    fs.readFileSync( "example.pub.pem" ) );

const _private_key =
  crypto.createPrivateKey(
    fs.readFileSync( "example.key.pem" ) );

const _csr = new CSR( {
  "subjectName": "/C=US/ST=Washington/L=Seattle/CN=example.com",
  "publicKey": _public_key,
  "privateKey": _private_key
} )

_csr.generate();

fs.writeFileSync( "example.csr.pem", _csr.toPEM() );

The ./example.js file shows how to generate a key pair using the crypto module. Instead of reading keys from the filesystem, it generates a key pair using the crypto.generateKeyPair() function:

let _key_pair = crypto.generateKeyPairSync( "rsa", {
  modulusLength: 2048,
  publicExponent: 0x10001
} );

And then generates the CSR like this:

let _request = new CSR( {
  "privateKey": _key_pair.privateKey,
  "publicKey": _key_pair.publicKey,
  "subjectName": subject_name
} )
.generate()
;

To test the module, try running ./example.js and then asking openssl to generate a self-signed certificate based on the private key and the CSR with this command:

openssl x509 -req -days 365 -in example.csr.pem \
  -signkey example.key.pem -sha256 \
  -out example.crt.pem

and then

openssl x509 -text -in example.crt.pem

No software project is ever complete. A list of planned improvements is in the ./todo.txt file. Better testing, attributes and ECC support.

About

Generate a PKCS#10 CSR from node-native public and private key. Only dependency is crypto module that comes with node.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages