не може да зареди публичен ключ

Имам затруднения с отстраняването на грешки в приложение 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.') 

Оценяваме всяка помощ при решаването на този проблем. Благодаря предварително.


person John Qualis    schedule 31.03.2012    source източник
comment
Най-малко Crypto.Cipher.RSA.importKey() работи с pycrypto-2.5 ​​с ключа, който сте предоставили, така че не трябва да има нищо лошо в самия ключ. Как четете ключа към променливата samplePEMKey?   -  person Kimvais    schedule 31.03.2012
comment
file_path = '/home/XXXX/co/certserver/LicenseServer/home_folders/dldl/samplePEMKey.pub' print pubKeyFile try: fin = open(file_path, 'r') освен IOError: return HttpResponse('IO Грешка при отваряне на качен файл.' ) опитайте: pubKey = fin.read() fin.close() освен IOError: return HttpResponse('IO Грешка при четене на качения файл.')   -  person John Qualis    schedule 31.03.2012
comment
Моля, редактирайте въпроса си, за да добавите съответния код - също pubKey != samplePEMKey   -  person Kimvais    schedule 31.03.2012
comment
Свършен. Благодаря. Оценявам отговора ви.   -  person John Qualis    schedule 31.03.2012


Отговори (1)


Отне известно време, за да го забележите, но се опитвате да прочетете публичен ключ с метод на личен ключ. Ако искате да използвате 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>
person Kimvais    schedule 31.03.2012
comment
страхотно Благодаря. Искам да използвам samplePEMKey, който е публичен PEM ключ, генериран от id_rsa, за да подпиша X509 заявка. Искам да конвертирам примерния публичен низ от прочетен от файл във формат, в който ще бъде приет при подписване на заявка X509. Можете ли да ме насочите към функцията, която да използвам? - person John Qualis; 31.03.2012
comment
От мен се изисква да използвам OpenSSL.crypto - person John Qualis; 31.03.2012