Python:ValueError:无法反序列化关键数据

时间:2019-01-23 03:22:22

标签: python cryptography

我生成了这样的自签证书:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="introduction">
  <h2>
    <span class="inwrap"><span class="in1"><a href="#about-me">Graphic designer</a> that </span></span>
    <span class="inwrap"><span class="in2">specializes in <a href="#days-of-ux">interactive</a></span></span>
    <span class="inwrap"><span class="in3"> design and <a href="#struggle-magazine">print</a></span></span>
  </h2>
</div>

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

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

但是,运行代码后,出现此错误:

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())

结果是我无法提取公钥。
如何解决此问题以便提取公钥?

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

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

pip install cryptography

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

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

引用:enter link description here