带有 PEM 文件的 nodejs jsonwebtoken:错误 "PEM_read_bio:no start line"
nodejs jsonwebtoken with PEM file: error "PEM_read_bio:no start line"
我知道这里有很多类似的问题,但经过几个小时的阅读,我找不到解决方案。所以:
我正在尝试使用 jwk-to-pem for signing a JSON web token using jsonwebtoken。我以前已经实现了这一点,但现在相同的代码不起作用。使用生成的 pem
调用 jwt.sign
后,我得到 error:0906D06C:PEM routines:PEM_read_bio:no start line
。
我知道常见的原因包括 \r
之类的错误换行符或一般错误的格式。实际上,我什至深入研究了核心 nodejs 代码,发现 the line 抛出了这个错误。
无数次的调整和尝试都没有解决。具体来说:
- 我确保所有换行符都是
\n
- 我在第一行和最后一行尝试了不同的字符串,例如
-----BEGIN PUBLIC KEY-----
或 -----BEGIN RSA PUBLIC KEY-----
- 我确保最后一行包含一个
\n
作为最后一个字符
- 我尝试使用节点的
fs
. 将 pem
字符串写入磁盘并重新读取它
- 我用多个编辑器将
pem
文件与其他几个文件进行了比较,例如使用 vi -b
或正则表达式。
- 我尝试将包含
pem
内容的原始文件缓冲区传递给 jwt.sign
以及 pem.toString('utf8')
以及 每个 其他字符串节点支持的编码
- 我尝试使用 linux 工具生成随机
pem
文件并将其提供给 jwt.sign
。具体来说:ssh-keygen -t rsa -b 2048 -f jwtRS256.key
openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.pem
我在这里错过了什么?这可能有哪些我没有想到的可能原因?
我找到了一个非常简单的解释:我错误地使用了 public 而不是私钥。 openssl/crypto 抛出的错误非常具有误导性。
使用私有 pem/key 签名按预期工作。
我知道这里有很多类似的问题,但经过几个小时的阅读,我找不到解决方案。所以:
我正在尝试使用 jwk-to-pem for signing a JSON web token using jsonwebtoken。我以前已经实现了这一点,但现在相同的代码不起作用。使用生成的 pem
调用 jwt.sign
后,我得到 error:0906D06C:PEM routines:PEM_read_bio:no start line
。
我知道常见的原因包括 \r
之类的错误换行符或一般错误的格式。实际上,我什至深入研究了核心 nodejs 代码,发现 the line 抛出了这个错误。
无数次的调整和尝试都没有解决。具体来说:
- 我确保所有换行符都是
\n
- 我在第一行和最后一行尝试了不同的字符串,例如
-----BEGIN PUBLIC KEY-----
或-----BEGIN RSA PUBLIC KEY-----
- 我确保最后一行包含一个
\n
作为最后一个字符 - 我尝试使用节点的
fs
. 将 - 我用多个编辑器将
pem
文件与其他几个文件进行了比较,例如使用vi -b
或正则表达式。 - 我尝试将包含
pem
内容的原始文件缓冲区传递给jwt.sign
以及pem.toString('utf8')
以及 每个 其他字符串节点支持的编码 - 我尝试使用 linux 工具生成随机
pem
文件并将其提供给jwt.sign
。具体来说:ssh-keygen -t rsa -b 2048 -f jwtRS256.key
openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.pem
pem
字符串写入磁盘并重新读取它
我在这里错过了什么?这可能有哪些我没有想到的可能原因?
我找到了一个非常简单的解释:我错误地使用了 public 而不是私钥。 openssl/crypto 抛出的错误非常具有误导性。
使用私有 pem/key 签名按预期工作。