Error: error:0909006C:PEM routines:get_name:no start line - node

Error: error:0909006C:PEM routines:get_name:no start line - node

我已经克隆了这个存储库 (https://github.com/docusign/code-examples-node),并且相信我已经输入了所有必需的密钥和代码。但是,当我尝试使用 JWT 进行身份验证时,出现此错误:

    at Sign.sign (internal/crypto/sig.js:105:29)
    at Object.sign (C:\Users\BrownJ3\Documents\repos\code-examples-node\node_modules\jwa\index.js:152:45)
    at Object.jwsSign [as sign] (C:\Users\BrownJ3\Documents\repos\code-examples-node\node_modules\jws\lib\sign-stream.js:32:24)
    at Object.module.exports [as sign] (C:\Users\BrownJ3\Documents\repos\code-examples-node\node_modules\docusign-esign\node_modules\jsonwebtoken\sign.js:189:16)
    at generateAndSignJWTAssertion (C:\Users\BrownJ3\Documents\repos\code-examples-node\node_modules\docusign-esign\src\ApiClient.js:62:16)
    at exports.requestJWTUserToken (C:\Users\BrownJ3\Documents\repos\code-examples-node\node_modules\docusign-esign\src\ApiClient.js:890:19)
    at _DsJwtAuth._getToken [as getToken] (C:\Users\BrownJ3\Documents\repos\code-examples-node\lib\DSJwtAuth.js:85:33)
    at log (C:\Users\BrownJ3\Documents\repos\code-examples-node\lib\DSJwtAuth.js:174:33)
    at _DsJwtAuth.DsJwtAuth.login (C:\Users\BrownJ3\Documents\repos\code-examples-node\lib\DSJwtAuth.js:184:5)
    at commonControllers.login (C:\Users\BrownJ3\Documents\repos\code-examples-node\lib\commonControllers.js:36:16) {
  library: 'PEM routines',
  function: 'get_name',
  reason: 'no start line',
  code: 'ERR_OSSL_PEM_NO_START_LINE```

这通常意味着 PEM 文件缺少指示关键部分已经开始的指示符。

PEM 文件的结构如下:

Intitial Data to be processed

-----Begin <Type>-----

Key Information

-----End <Type>-----

可在此处找到这些文件的标准:https://www.rfc-editor.org/rfc/rfc7468

您能否确认您正在使用的 PEM 文件中是否存在 ----- 开始/结束行?请不要 post 这里的实际文件,如果它们存在于 PEM 中,我们将希望您使用 DocuSign 打开一个支持案例,以便我们保留任何必要的私人数据以进行故障排除。

您可以在此处验证您的证书:https://www.sslchecker.com/certdecoder

在我的例子中,我粘贴错误,漏掉了一个破折号:

- -----BEGIN CERTIFICATE-----
+ ----BEGIN CERTIFICATE-----

请注意前 5 个破折号很重要。

如果使用 docker,我有一些观察。

  1. 尝试将 .env 值设为纯文本。不是字符串文字。
  2. 获取要编码的项目时,将 '\n' 替换为 '\n'

如果您只是将它用作沙盒项目,您可以使用:(没有私钥)

var jwt = require('jsonwebtoken');
var token = jwt.sign({ foo: 'bar' }, 'shhhhh');

如果不是沙箱,你必须生成一个privteKey。

你可以在 jsonwebtoken 文档上看到它: https://www.npmjs.com/package/jsonwebtoken

尝试从 -->

中删除 .nprm

C:\Users{用户名}

然后就可以正常工作了