不断出现错误:0906D06C:PEM例程:PEM_read_bio:没有起始行。

7

尝试使用Node.js连接Xero API时,苦恼于解决错误。

我已使用了许多组合,“.cer”、“ .crt”和“ .pem”。

我遵循了许多StackOverflow张贴者的建议。

Node.js https pem错误:error:0906D06C:PEM例程:PEM_read_bio:无起始行

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)

有人能提供一些见解吗?

Xero API说它需要一个X509证书...但我甚至没有发出调用。

2个回答

5
您需要一个PEM编码的密钥,因为模块仅调用了node内置的模块来签署一些数据。这些类型的密钥以

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

开头,并以

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

结尾,中间包含base64编码的数据。

您可以使用命令行工具生成此类密钥:

openssl genrsa -out privateKey.pem 2048

然后在node中读取:

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

// pass `privateKey` as the RSA private key to the `xero` module ...

我使用了PEM编码,但好像没有起作用。我是使用openssl命令行选项创建的证书。 - GeneralBear
来自 Xero 的 Node 库的 API 调用要求您输入“RSA 私钥”;我使用了许多由 OpenSSL 创建的私钥文件类型,包括 crt、cer 和 pem。无论我使用哪个密钥,都会出现相同的错误。 - GeneralBear
1
你可以展示一下你正在使用的 OpenSSL 命令来生成私钥。 - mscdex
1
这是最新的: openssl req -newkey rsa:2048 -new -nodes -keyout key.pem -out csr.pem - GeneralBear
1
我更新了我的回答,并提供了一个示例openssl命令行,应该可以工作。 - mscdex
非常感谢。运行得非常好! - GeneralBear

-1

请检查您的证书格式。在 .cer 或 .crt 格式中应该包含回车符(\r)和换行符(\n)。Postman 需要这些信息。 可以通过在记事本中打开来验证。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接