2012-03-31 8 views
2

У меня возникли трудности с отладкой приложения 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----- 

В моем питона приложении я использую 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

По крайней мере 'Crypto.Cipher.RSA.importKey () 'работает с pycrypto-2.5 ​​с ключом, который вы поставили, поэтому не должно быть ничего плохого в самом ключе. Как вы читаете ключ переменной 'samplePEMKey'? – Kimvais

+0

file_path = '/home/XXXX/co/certserver/LicenseServer/home_folders/dldl/samplePEMKey.pub' \t печати pubKeyFile попробовать: плавник = открыт (file_path, 'г') кроме IOError: возвращение HttpResponse ('IO ошибки при открытии загруженного файла.) попробовать: Публичных = fin.read() fin.close() кроме IOError: возвращения HttpResponse (' IO ошибки при чтении загруженного файл.) –

+0

Пожалуйста, измените вопрос для добавления соответствующего кода - также 'pubKey'! =' samplePEMKey' – Kimvais

ответ

1

Потребовалось время, чтобы определить это, но вы пытаетесь прочитать общественности ключ с собственным ключа методом . Если вы хотите использовать load_privatekey, вы должны использовать оригинал id_rsa в качестве входных данных.

Я не помню, как сделать то же самое с OpenSSL.crypto, но, по крайней мере, с RSA реализации Вашего импорта основных образцов в pycrypto инструментария просто отлично:

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

Awesome. Благодарю. Я хочу использовать samplePEMKey, который является общедоступным ключом PEM, сгенерированным из id_rsa, чтобы подписать запрос X509. Я хочу преобразовать образец public из строки, считанной из файла, в формат, где он будет принят при подписании запроса X509. Можете ли вы указать мне на функцию? –

+0

Мне нужно использовать OpenSSL.crypto –

Смежные вопросы