我在调试需要使用公钥来签署证书的django / python应用程序时遇到了困难。 1.我使用以下命令从我的私钥创建了PEM格式的密钥
openssl rsa -pubout -in ~/.ssh/id_rsa > samplePEMKey.pub
密钥如下:
-----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并尝试使用
加载密钥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.')
感谢您解决此问题的任何帮助。提前谢谢。
答案 0 :(得分:1)
花了一段时间才发现它,但您正在尝试使用私有键方法读取 public 键。如果您想使用load_privatekey
,则应使用原始id_rsa
作为输入。
我不记得如何对OpenSSL.crypto
执行相同操作,但至少使用pycrypto工具包的RSA
实现,您的示例密钥导入正常:
>>> kt = open("samplePEMKey.pub").read()
>>> from Crypto.PublicKey import RSA
>>> key = RSA.import_key(kt)
>>> key
<_RSAobj @0x109916d40 n(2048),e>