#!/usr/bin/env node const aws = require('aws-sdk') aws.config.update({region: 'us-east-1'}); iot = new aws.Iot() const { exec, spawn } = require('child_process') const { exit } = require('process') const fs = require('fs'); const device = process.argv[2] const verbose = false console.log("Provisioning key and certificate for " + device) // runs a list of commands in a shell const run = function (cmd,...args) { exec(cmd, (err,stdout,stderr) => { if (err) { console.log(err) } if (verbose) console.log(stderr) if (verbose) console.log(stdout) if (args.length == 1 && typeof(args[0]) == 'function') return args[0]() return run(...args) }) } const createCredentials = (device,cb) => { fs.readFile(device + '.csr', 'utf8', (err,csr) => { console.log(csr) var params = { certificateSigningRequest: csr, setAsActive: true }; iot.createCertificateFromCsr(params, function(err, data) { if (err) return console.log(err, err.stack) fs.writeFile(device + '.crt', data.certificatePem, (err,data) => { if (err) return console.log(err) console.log(data) }) }); }) } const createKeyAndCsr = (device) => { run( 'openssl genrsa -out "' + device + '.key" 2048', 'openssl req -new -key "' + device + '.key" -out "' + device + '.csr" -subj "/CN=' + device +'"', (() => { createCredentials(device) }) ) } createKeyAndCsr(device)