Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Keep getting error:0906D06C:PEM routines:PEM_read_bio:no start line

Going crazy trying to solve error on Node.js while trying to contact Xero API.

I've used a bunch of combinations of '.cer' and '.crt' and '.pem'.

I've followed the advice of a number of StackOverflow posters.

Node.js https pem error: error:0906D06C:PEM routines:PEM_read_bio:no start line

Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
    at Error (native)
    at Sign.sign (crypto.js:327:26)
    at Xero.oa._createSignature (/Users/BeardedMac/projects/clause/clause-mean-stack/node_modules/xero/index.js:19:68)
    at exports.OAuth._getSignature (/Users/BeardedMac/projects/clause/clause-mean-stack/node_modules/xero/node_modules/oauth/lib/oauth.js:90:15)
    at exports.OAuth._prepareParameters (/Users/BeardedMac/projects/clause/clause-mean-stack/node_modules/xero/node_modules/oauth/lib/oauth.js:300:16)
    at exports.OAuth._performSecureRequest (/Users/BeardedMac/projects/clause/clause-mean-stack/node_modules/xero/node_modules/oauth/lib/oauth.js:309:31)
    at Xero.call (/Users/BeardedMac/projects/clause/clause-mean-stack/node_modules/xero/index.js:51:20)
    at /Users/BeardedMac/projects/clause/clause-mean-stack/routes/external.js:47:10
    at Layer.handle [as handle_request] (/Users/BeardedMac/projects/clause/clause-mean-stack/node_modules/express/lib/router/layer.js:95:5)
    at next (/Users/BeardedMac/projects/clause/clause-mean-stack/node_modules/express/lib/router/route.js:131:13)
    at Route.dispatch (/Users/BeardedMac/projects/clause/clause-mean-stack/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/Users/BeardedMac/projects/clause/clause-mean-stack/node_modules/express/lib/router/layer.js:95:5)
    at /Users/BeardedMac/projects/clause/clause-mean-stack/node_modules/express/lib/router/index.js:277:22
    at Function.process_params (/Users/BeardedMac/projects/clause/clause-mean-stack/node_modules/express/lib/router/index.js:330:12)
    at next (/Users/BeardedMac/projects/clause/clause-mean-stack/node_modules/express/lib/router/index.js:271:10)
    at expressInit (/Users/BeardedMac/projects/clause/clause-mean-stack/node_modules/express/lib/middleware/init.js:33:5)

Anyone out there have some insight?

The Xero API says it wants an X509 certificate...I'm not even making the call though.

like image 373
GeneralBear Avatar asked Aug 01 '16 16:08

GeneralBear


1 Answers

You need a PEM-encoded key as the xero module merely calls out to node's built-in crypto module to sign some data. Those types of keys start with

-----BEGIN RSA PRIVATE KEY-----

and end with

-----END RSA PRIVATE KEY-----

with base64-encoded data in between.

You can generate such a key using the openssl command-line utility:

openssl genrsa -out privateKey.pem 2048

Then read privateKey.pem in node like:

var fs = require('fs');
var privateKey = fs.readFileSync('/path/to/privateKey.pem');

// pass `privateKey` as the RSA private key to the `xero` module ...
like image 122
mscdex Avatar answered Nov 15 '22 03:11

mscdex