【问题标题】:Python: ValueError: Could not deserialize key dataPython:ValueError:无法反序列化关键数据
【发布时间】:2019-06-16 14:11:16
【问题描述】:

我生成了一个自我签名的证书,如下所示:

openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365

文件 cert.pem 包含我的公钥。我希望从此文件中提取此公钥。
我尝试做的方式是:

f = open('cert.pem', "rb")
pem_data = f.read()
f.close()

print(pem_data)
key = serialization.load_pem_public_key(pem_data,  backend=default_backend())

但是,运行代码后,我得到了这个错误:

ValueError: Could not deserialize key data.

因此我无法提取公钥。
如何解决此问题以提取公钥?

【问题讨论】:

标签: python cryptography


【解决方案1】:

文档中的注释

以 -----BEGIN CERTIFICATE----- 开头的 PEM 块不是公钥或私钥,而是 X.509 证书。您可以使用 load_pem_x509_certificate() 加载它并使用 Certificate.public_key 提取公钥。

试试这个:

from cryptography.hazmat.backends import default_backend
from cryptography import x509

f = open('cert.pem', "rb")
pem_data = f.read()
f.close()

key = x509.load_pem_x509_certificate(pem_data,  backend=default_backend())
public_key = key.public_key()

【讨论】:

    【解决方案2】:

    首先检查是否安装了加密库:

    pip install cryptography
    

    您必须使用 OpenSSL 创建 RSA 密钥:

    openssl genrsa -out jwt-key 4096
    openssl rsa -in jwt-key -pubout > jwt-key.pub
    

    参考:enter link description here

    【讨论】:

      猜你喜欢
      • 2018-09-29
      • 2019-04-19
      • 1970-01-01
      • 2023-02-18
      • 1970-01-01
      • 2021-02-17
      • 1970-01-01
      • 2019-11-27
      • 2011-05-06
      相关资源
      最近更新 更多