You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Django SimpleJWT+RSA256时遭遇PEM格式密钥错误

解决django-simplejwt使用RSA256时的"Expecting a PEM-formatted key"错误

以下是几个最可能的原因和对应的解决步骤:

  • 检查.env中的密钥格式完整性
    确保你的RSA私钥和公钥完整包含PEM标准的头部和尾部:

    • 私钥必须以-----BEGIN RSA PRIVATE KEY-----开头,-----END RSA PRIVATE KEY-----结尾
    • 公钥必须以-----BEGIN PUBLIC KEY-----开头,-----END PUBLIC KEY-----结尾
      同时注意.env文件里的密钥内容不要有多余的空格、换行或转义字符,比如有些编辑器会自动在每行末尾加空格,或者环境变量加载工具把换行转成了\n字符串而非实际换行。
  • 修正settings.py中的密钥加载逻辑
    如果是直接把密钥内容存在.env里,而非文件路径,要确保加载时把转义的换行符还原:

    import os
    from dotenv import load_dotenv
    
    load_dotenv()
    
    SIMPLE_JWT = {
        'ALGORITHM': 'RS256',
        'PRIVATE_KEY': os.getenv('RSA_PRIVATE_KEY').replace('\\n', '\n'),
        'PUBLIC_KEY': os.getenv('RSA_PUBLIC_KEY').replace('\\n', '\n'),
        # 其他JWT配置项...
    }
    

    如果你是用文件路径存储密钥,直接读取文件内容更可靠:

    SIMPLE_JWT = {
        'ALGORITHM': 'RS256',
        'PRIVATE_KEY': open(os.getenv('RSA_PRIVATE_KEY_FILE')).read(),
        'PUBLIC_KEY': open(os.getenv('RSA_PUBLIC_KEY_FILE')).read(),
        # 其他JWT配置项...
    }
    
  • 验证密钥的合法性
    用OpenSSL命令检查密钥是否符合PEM标准:

    # 验证私钥
    openssl rsa -check -in private_key.pem
    # 验证公钥
    openssl rsa -pubin -check -in public_key.pem
    

    如果命令报错,说明密钥生成有问题,重新生成标准的RSA密钥对:

    # 生成2048位RSA私钥
    openssl genrsa -out private_key.pem 2048
    # 从私钥导出公钥
    openssl rsa -in private_key.pem -pubout -out public_key.pem
    
  • 升级django-simplejwt版本
    旧版本可能对RSA密钥的处理存在bug,升级到最新稳定版:

    pip install --upgrade django-simplejwt
    

内容的提问来源于stack exchange,提问作者fullstacknoob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 19:45:40