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

2

7

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.

Bradfield answered 1/8, 2016 at 16:9 Comment(0)
H
5

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 ...
Hexapody answered 1/8, 2016 at 16:15 Comment(6)
I've used pem encoding, it does not seem to be working. I created my certificates using the openssl command-line optionsBradfield
the api call from xero's node library asks you to enter an "RSA PRIVATE KEY"; I've used a number of filetypes of private keys, created by openssl, including crt, cer, and pem. Irrespective of which key I use, I get the same error.Bradfield
You might show the actual openssl commands you're using to generate the private key.Hexapody
this is the most recent: openssl req -newkey rsa:2048 -new -nodes -keyout key.pem -out csr.pemBradfield
I've updated my answer with an example openssl command line that should work.Hexapody
Thank you so much. Worked like a charm!Bradfield
K
-1

Check your certificate format. Carriage return(\r) and new line(\n) should be there in the .cer or .crt format. Postman expects this. This can be verified by opening it in notepad.

Kirkham answered 10/8, 2021 at 10:17 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.