【问题标题】:nodejs jsonwebtoken with PEM file: error "PEM_read_bio:no start line"带有 PEM 文件的 nodejs jsonwebtoken:错误“PEM_read_bio:no start line”
【发布时间】:2018-10-18 21:23:26
【问题描述】:

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

我正在尝试使用jwk-to-pem 使用jsonwebtoken 签署JSON Web 令牌。我以前已经实现了这一点,但现在相同的代码不起作用。在使用生成的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 作为最后一个字符
  • 我尝试使用节点的fspem 字符串写入磁盘并重新读取它。
  • 我使用多个编辑器将pem 文件与其他几个文件进行了比较,例如使用vi -b 或正则表达式。
  • 我尝试将带有pem 内容的原始文件缓冲区交给jwt.signpem.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

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

【问题讨论】:

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


    【解决方案1】:

    我找到了一个非常简单的解释:我错误地使用了公钥而不是私钥。 openssl/crypto 抛出的错误非常具有误导性。

    使用私有 pem/key 签名按预期工作。

    【讨论】:

      猜你喜欢
      • 2020-11-07
      • 2018-11-01
      • 2014-04-30
      • 1970-01-01
      • 2020-07-16
      • 2016-09-04
      • 2017-02-24
      • 2017-02-18
      • 2018-07-04
      相关资源
      最近更新 更多