не удалось загрузить открытый ключ

У меня возникают трудности с отладкой приложения 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('Ошибка ввода-вывода при открытии загруженного файла.' ) попробуйте: pubKey = fin.read() fin.close(), кроме IOError: return HttpResponse('Ошибка ввода-вывода при чтении загруженного файла.')   -  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. Я хочу преобразовать образец public из строки, прочитанной из файла, в формат, в котором он будет принят при подписании запроса X509. Можете ли вы указать мне функцию для использования? - person John Qualis; 31.03.2012
comment
Мне необходимо использовать OpenSSL.crypto - person John Qualis; 31.03.2012