错误:错误:0909006C:PEM 例程:get_name:无起始行 - 节点

Jac*_*ack 11 docusignapi

我已经克隆了这个 repo ( 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```
Run Code Online (Sandbox Code Playgroud)

Pav*_*atý 21

如果您确实拥有@Matt King DS 建议的有效 PEM 结构,但您仍然收到此错误,则新行可能会导致错误。

如果您使用dotenv,则从文档中:

多行值

如果您需要多行变量,例如私钥,现在支持带换行符的(>= v15.0.0):

PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----

...

Kh9NV...

...

-----END DSA PRIVATE KEY-----"
Run Code Online (Sandbox Code Playgroud)

或者,您可以双引号字符串并使用 \n 字符:

PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\nKh9NV...\n-----END DSA PRIVATE KEY---
Run Code Online (Sandbox Code Playgroud)

AWS 拉姆达

我在AWS lambda中也遇到了这个错误。上述方法对我不起作用。我必须在 lambda 中使用不带双引号的 env 变量,并使用 \n 而不是换行符,并且在代码中我必须将 \n 替换为 \n,如下所示:

process.env.MY_PRIVATE_KEY.replace(/\\n/g, '\n')
Run Code Online (Sandbox Code Playgroud)


Jef*_*ian 20

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

就我而言,我粘贴错误,漏掉了一个破折号:

- -----BEGIN CERTIFICATE-----
+ ----BEGIN CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)

请注意,前五个破折号至关重要。

警告

如果您不想粘贴到未知站点,您可以尝试以下命令,感谢@Adrian Gonzalez:

openssl x509 -in <cert-name>.pem -noout -text
Run Code Online (Sandbox Code Playgroud)

  • 我有点担心使用未知网站将敏感私钥粘贴到其中,不能保证他们不会滥用它。但如果我在这方面错了,请纠正我 (7认同)

Hen*_*l B 18

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

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


小智 17

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

PEM 文件的结构如下:

Intitial Data to be processed

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

Key Information

-----End <Type>-----
Run Code Online (Sandbox Code Playgroud)

这些文件的标准可以在这里找到:https : //tools.ietf.org/html/rfc7468

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

  • 我有起始线,但仍然收到错误。-----开始证书----- (17认同)

kts*_*gop 5

如果您在 Angular CLI 中遇到此问题,请确保您的 ssl 密钥路径有效。

运行时遇到同样的问题:

ng serve --ssl true --ssl-cert ./ssl/server.crt --ssl-key ./ssl/server.key

事实证明我的路径无效。