Skip to main content
 首页 » 编程设计

python之无法加载公钥

2025年05月04日13落叶无声

我在调试需要使用公钥签署证书的 django/python 应用程序时遇到困难。 1. 我使用以下命令从我的私钥创建了一个 PEM 格式的 key

openssl rsa -pubout -in ~/.ssh/id_rsa > samplePEMKey.pub 

key 在下面给出

-----BEGIN PUBLIC KEY----- 
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8K/LfOBi+QrINSseqWwc 
JGo4uE49Dc42zF2Jwbmc6iXIln8AWX5M+yn15dYOXzbHGbopH8bpF9CsJ/DPHg87 
D1At1XwAy5aR5w7pXE//5p/saW50Sm/eY6Nugs9hgAXUTcMMAEXCIG17dLoUzhwE 
YdzuPm350h39bTmI7Fz95koTbsKJUi+6337GJ3cWKxMBkEmWvpGo4Nko01xtEnUZ 
GweKexr1roE8jZPpzuNeUy+S5tvH5emyBIBdroBVxBtz1OUIoP0oAOrQ5RtRPAcT 
TsSWjMtyF2gO5GxeMErRqnLAtWJs4QlaJacVnMMTAgRjrGkUZdsqngM/fjQXfeZV 
SwIDAQAB 
-----END PUBLIC KEY----- 

在我的 python 应用程序中,我正在使用 OpenSSL 并尝试使用 加载 key

pkey = crypto.load_privatekey(crypto.FILETYPE_PEM, samplePEMKey) 

运行 django 应用程序时,我在上面一行收到以下错误。

Request Method:     POST 
Request URL:    http://127.0.0.1:8000/snapshotuploader/single/ 
Django Version:     1.3.1 
Exception Type:     Error 
Exception Value:     
 
[('PEM routines', 'PEM_read_bio', 'no start line')] 

这是我从文件中读取公钥的方法

    file_path = '/home/XXXX/co/certserver/LicenseServer/home_folder/dldl/samplePEMKey.pub'  
try:  
  fin = open(file_path, 'r')  
except IOError:  
  return HttpResponse('IO Error opening uploaded file.')  
try:  
  samplePEMKey = fin.read()  
  fin.close()  
except IOError:  
  return HttpResponse('IO Error reading uploaded file.')  

感谢解决此问题的任何帮助。提前致谢。

请您参考如下方法:

花了一些时间才发现它,但您正在尝试使用私有(private) key 方法读取公共(public) key 。如果你想使用 load_privatekey 你应该使用原始的 id_rsa 作为输入。

我不记得如何用 OpenSSL.crypto 做同样的事情,但至少用 pycrypto工具包的 RSA 实现您的示例 key 导入就好了:

>>> kt = open("samplePEMKey.pub").read() 
>>> from Crypto.PublicKey import RSA 
>>> key = RSA.import_key(kt) 
>>> key 
<_RSAobj @0x109916d40 n(2048),e>