nodejs jsonwebtoken with PEM file:error" PEM_read_bio:no start line"

时间:2017-10-02 18:19:27

标签: javascript node.js openssl cryptography json-web-token

我知道这里有很多类似的问题,但经过几个小时的阅读后,我无法找到解决方案。所以:

我正在尝试使用jwk-to-pem使用jsonwebtoken签署JSON网络令牌。我之前已经实现了这一点,但现在相同的代码不起作用。使用生成的jwt.sign致电pem后,我获得error:0906D06C:PEM routines:PEM_read_bio:no start line。 我知道常见的原因包括错误的换行符,如\r或一般错误的格式。我实际上甚至挖掘了核心nodejs代码并发现the line抛出了这个错误。

无数的调整和尝试都没有带来任何解决方案。具体做法是:

  • 我确保所有换行符都是\n
  • 我为第一行和最后一行尝试了不同的字符串,例如: -----BEGIN PUBLIC KEY----------BEGIN RSA PUBLIC KEY-----
  • 我确保最后一行包含\n作为最后一个字符
  • 我尝试将pem字符串写入磁盘并使用节点fs重新读取它。
  • 我将pem文件与多个其他文件进行了比较,例如多个编辑器,例如:使用vi -b或正则表达式。
  • 我尝试将带有pem内容的原始文件缓冲区移至jwt.sign以及pem.toString('utf8')以及每个其他字符串,这些字符串受到节点<支持/ LI>
  • 我尝试使用linux工具生成一个随机pem文件并将其提供给jwt.sign。具体来说:ssh-keygen -t rsa -b 2048 -f jwtRS256.key
    openssl rsa -in jwtRS256.key -pubout -outform PEM -out jwtRS256.pem

我在这里缺少什么?我没想到的可能原因是什么?

1 个答案:

答案 0 :(得分:0)

我找到了一个非常简单的解释:我错误地使用公共而不是私钥。 openssl / crypto引发的错误非常容易引起误解。

使用私人pem /键,签名按预期工作。